Section Highlights

  • Series Structure , item count , NaNs
  • Descriptive Ststistics
  • Series Arithmetics
  • Sorting Series
  • filtering and Custom Transformations
In [1]:
import pandas as pd

Reading in Data with read_csv()

CSV : Comma Separated Values (.csv) File

A type of text File containing values delimited by or separated by comma

  • A CSV file is simply a text file containing values separated by commas
In [5]:
#Read the CSV by passing the URL

#drinks = pd.read_csv('https://andybek.com/pandas-drinks')
drinks = pd.read_csv('drinks.csv')
In [6]:
drinks.head(3)
Out[6]:
country beer_servings spirit_servings wine_servings total_litres_of_pure_alcohol
0 Afghanistan NaN NaN NaN NaN
1 Albania 89.0 132.0 54.0 4.9
2 Algeria 25.0 NaN 14.0 0.7
In [7]:
#I only want two columns
pd.read_csv('drinks.csv' , usecols = ['country' , 'wine_servings'])
Out[7]:
country wine_servings
0 Afghanistan NaN
1 Albania 54.0
2 Algeria 14.0
3 Andorra 312.0
4 Angola 45.0
... ... ...
188 Venezuela 3.0
189 Vietnam 1.0
190 Yemen NaN
191 Zambia 4.0
192 Zimbabwe 4.0

193 rows × 2 columns

In [11]:
#I want "Country" to act as a Index for the DataFrame
pd.read_csv('drinks.csv' , usecols = ['country' , 'wine_servings'], index_col = 'country')
Out[11]:
wine_servings
country
Afghanistan NaN
Albania 54.0
Algeria 14.0
Andorra 312.0
Angola 45.0
... ...
Venezuela 3.0
Vietnam 1.0
Yemen NaN
Zambia 4.0
Zimbabwe 4.0

193 rows × 1 columns

In [12]:
alcohol = pd.read_csv('drinks.csv' , usecols = ['country' , 'wine_servings'], index_col = 'country')
In [15]:
#The output is still a Dataframe and not a Series
alcohol.head()
Out[15]:
wine_servings
country
Afghanistan NaN
Albania 54.0
Algeria 14.0
Andorra 312.0
Angola 45.0
In [16]:
type(alcohol)
Out[16]:
pandas.core.frame.DataFrame

Note : "pandas.read_csv" method always returns a Data Frame

But there is this "squeeze" method

squeeze : bool, default False : If the parsed data only contains one column then squeeze that DataFrame and return a Series.

In [27]:
alcohol = pd.read_csv('drinks.csv' , usecols = ['country' , 'wine_servings'],  index_col = 'country' ,squeeze = True)
In [28]:
alcohol.head()
Out[28]:
country
Afghanistan      NaN
Albania         54.0
Algeria         14.0
Andorra        312.0
Angola          45.0
Name: wine_servings, dtype: float64
In [29]:
alcohol = pd.read_csv('drinks.csv' , usecols = ['country'],squeeze = True)
In [30]:
type(alcohol)
Out[30]:
pandas.core.series.Series
In [32]:
alcohol.head()
Out[32]:
0    Afghanistan
1        Albania
2        Algeria
3        Andorra
4         Angola
Name: country, dtype: object
In [33]:
alcohol = pd.read_csv('drinks.csv' , usecols = ['country' , 'wine_servings'],  index_col = 'country' ,squeeze = True)
In [37]:
alcohol.head()
Out[37]:
country
Afghanistan      NaN
Albania         54.0
Algeria         14.0
Andorra        312.0
Angola          45.0
Name: wine_servings, dtype: float64
In [34]:
alcohol.shape
Out[34]:
(193,)
In [36]:
#size attribute gives us the length of the series
#We ae looking at a Series of length 193
alcohol.size  
Out[36]:
193
In [39]:
alcohol  #You can see the "Length" here
Out[39]:
country
Afghanistan      NaN
Albania         54.0
Algeria         14.0
Andorra        312.0
Angola          45.0
               ...  
Venezuela        3.0
Vietnam          1.0
Yemen            NaN
Zambia           4.0
Zimbabwe         4.0
Name: wine_servings, Length: 193, dtype: float64

Remember : A Series consists of a sequence of values and associated Labels.

In [41]:
#We can access the values :
#That gives us an Array of values

alcohol.values
Out[41]:
array([ nan,  54.,  14., 312.,  45.,  45., 221.,  11., 212., 191.,   5.,
        51.,   7.,  nan,  36.,  42., 212.,   8.,  13.,  nan,   8.,   8.,
        35.,  16.,   1.,  94.,   7.,  nan,   7.,  16.,   1.,   4.,   1.,
         1.,   1., 172.,   8.,   3.,   1.,   9.,  74.,  11., 254.,   5.,
       113., 134.,  nan,   1., 278.,   3.,  26.,   9.,   3.,   1.,   2.,
       233.,  nan,  59.,  nan,   1.,  97.,  37.,  59.,   1., 149., 175.,
         1., 218.,  28.,   2.,   2.,  21.,   1.,   1.,   2., 185.,  78.,
        nan,  nan,  nan,  nan, 165.,   9., 237.,   9.,  16.,   1.,  12.,
         2.,   1.,  nan,   6., 123.,  62.,  31.,  nan,   2.,  nan,  56.,
       271.,   4.,   1.,  nan,  nan,   1.,  12.,  nan,  nan,  18.,   5.,
        18.,  nan,   8., 128.,   1.,   5.,  nan,   1.,   8.,  nan,  19.,
       175.,   1.,   1.,   2.,   7., 129.,   1.,  nan,  23.,  18.,   1.,
        74.,  21.,   1.,  56., 339.,   7.,   9.,  18., 167.,  73.,  nan,
        32.,  71.,  11.,  24.,  nan,  14.,  nan,   7., 127.,  51.,   2.,
        11., 116., 276.,   1.,  nan,  81., 112.,  nan,  nan,   7.,   2.,
       186.,  28.,  16.,  nan,   1.,  86.,   4.,  19.,   5.,   7.,   2.,
         7.,  32.,   9.,  nan,  45.,   5., 195.,   1.,  84.,  22.,   8.,
        11.,   3.,   1.,  nan,   4.,   4.])
In [43]:
#Lets look at the associated Index

alcohol.index
Out[43]:
Index(['Afghanistan', 'Albania', 'Algeria', 'Andorra', 'Angola',
       'Antigua & Barbuda', 'Argentina', 'Armenia', 'Australia', 'Austria',
       ...
       'Tanzania', 'USA', 'Uruguay', 'Uzbekistan', 'Vanuatu', 'Venezuela',
       'Vietnam', 'Yemen', 'Zambia', 'Zimbabwe'],
      dtype='object', name='country', length=193)
In [44]:
alcohol.values.size == alcohol.index.size
Out[44]:
True

Observation

  • The size of the values array is equal to the size of the index array

SHAPE attribute

"series".shape returns a Tuple

Note : Series are only one Dimensional

In [45]:
alcohol.shape
Out[45]:
(193,)

Observation

  • We got a Tuple
  • We can access the first (or the only element) of this tuple with "alcohol.shape[0]"
In [46]:
alcohol.shape[0]
Out[46]:
193
In [47]:
alcohol.size
Out[47]:
193
In [48]:
alcohol.size == alcohol.shape[0]
Out[48]:
True

or

In [49]:
len(alcohol)
Out[49]:
193

Size and Shape

.size : number of elements in the series

.shape : tuple of the dimensions for a Series (1D) shape, i.e, length for series

len() : Python built-in function

Unique Values and Series Monotonicity

Check if a Series contains a Sequence of Unique values

In [51]:
#Look at the alcohol Series

alcohol.head()
Out[51]:
country
Afghanistan      NaN
Albania         54.0
Algeria         14.0
Andorra        312.0
Angola          45.0
Name: wine_servings, dtype: float64
In [52]:
alcohol.is_unique
Out[52]:
False
In [54]:
#Checking uniqueness just for the head()
alcohol.head().is_unique
Out[54]:
True
In [59]:
alcohol.head(15)
Out[59]:
country
Afghanistan            NaN
Albania               54.0
Algeria               14.0
Andorra              312.0
Angola                45.0
Antigua & Barbuda     45.0
Argentina            221.0
Armenia               11.0
Australia            212.0
Austria              191.0
Azerbaijan             5.0
Bahamas               51.0
Bahrain                7.0
Bangladesh             NaN
Barbados              36.0
Name: wine_servings, dtype: float64
In [60]:
alcohol.head(15).is_unique
Out[60]:
False

Observation

  • 45.0 is repeated
  • "country" is the index , we are not looking at the unique Indexes , we are checking the unique values.

nquique() gives the count of unique values in a Series

In [68]:
#For complete DataFrame
drinks.nunique()
Out[68]:
country                         193
beer_servings                   116
spirit_servings                 100
wine_servings                    71
total_litres_of_pure_alcohol     82
dtype: int64
In [65]:
alcohol.nunique()
Out[65]:
71

Observation

  • nunique does not count the NA
In [62]:
#If you want to include the NA as well 
alcohol.nunique(dropna = False)
Out[62]:
72
In [69]:
#For complete DataFrame
drinks.nunique(dropna = False)
Out[69]:
country                         193
beer_servings                   117
spirit_servings                 101
wine_servings                    72
total_litres_of_pure_alcohol     83
dtype: int64

The nunique() method returns the number of unique values for each column

💡 Did you know ?

nunique() , does not include NAN while counting the unique values in a Series or column

In [73]:
drinks.shape
Out[73]:
(193, 5)
In [71]:
#For complete DataFrame
#nunique count does not include NAN by default
drinks.nunique()
Out[71]:
country                         193
beer_servings                   116
spirit_servings                 100
wine_servings                    71
total_litres_of_pure_alcohol     82
dtype: int64
In [72]:
#we pass : dropna = False : so NANs are included if any
drinks.nunique(dropna = False)
Out[72]:
country                         193
beer_servings                   117
spirit_servings                 101
wine_servings                    72
total_litres_of_pure_alcohol     83
dtype: int64

is_monotonic() Attribute

In [83]:
#Notice in the below series , the values are always increasing
pd.Series([1,2,3]).is_monotonic
Out[83]:
True
In [84]:
#Below is a series which is increasing and Stagnating
pd.Series([1,2,3, 3 , 3 , 3 ]).is_monotonic
Out[84]:
True
In [85]:
#Below is a series which is increasing and Stagnating and increasing
pd.Series([1,2,3, 3 , 3 , 3 , 48 , 79 , 100 ]).is_monotonic
Out[85]:
True
In [87]:
#Below is a series which is increasing and Stagnating and increasing and  then we add a "7"
#Because at "7" it is a significant decrease , it is no longer Monotonic
pd.Series([1,2,3, 3 , 3 , 3 , 48 , 79 , 100  , 7]).is_monotonic
Out[87]:
False

Observation

  • Since the result is False , we can conclude its not a Monotonic Sequence
In [88]:
#Below is a series which is increasing and Stagnating and increasing
pd.Series([1,2,3, 3 , 3 , 3 , 48 , 79 , 100 ]).is_monotonic_increasing
Out[88]:
True
In [89]:
#Below is a series which is increasing and Stagnating and increasing
pd.Series([1,2,3, 3 , 3 , 3 , 48 , 79 , 100 ]).is_monotonic_decreasing
Out[89]:
False
In [95]:
#When we use reversed()
reversed_list = list(reversed([1,2,3, 3 , 3 , 3 , 48 , 79 , 100 ]))
In [96]:
reversed_list 
Out[96]:
[100, 79, 48, 3, 3, 3, 3, 2, 1]
In [98]:
#Now we reverse the List and check for the Monotonicity

pd.Series(reversed([1,2,3, 3 , 3 , 3 , 48 , 79 , 100 ])).is_monotonic
Out[98]:
False
In [99]:
pd.Series(reversed([1,2,3, 3 , 3 , 3 , 48 , 79 , 100 ])).is_monotonic_decreasing
Out[99]:
True
In [100]:
pd.Series(reversed([1,2,3, 3 , 3 , 3 , 48 , 79 , 100 ])).is_monotonic_increasing
Out[100]:
False

The count() Method

In [101]:
#Count the values of a Series
alcohol.count()
Out[101]:
162
In [102]:
#Count the values of a DataFrame
drinks.count()
Out[102]:
country                         193
beer_servings                   178
spirit_servings                 170
wine_servings                   162
total_litres_of_pure_alcohol    180
dtype: int64
In [105]:
#But the Size of the Series was 193
#Then why is the count() method showing just 162
#What accounts for this difference?
alcohol.size
Out[105]:
193

Note:

count() method only looks at values that are not Null

Series.count() : Returns the number of non-NA / null observations in the Series

In [107]:
import numpy as np
In [108]:
s = pd.Series([0.0 , 1.0 , np.nan])
In [109]:
s.count()
Out[109]:
2

Difference between Series.size and Series.count

Series.size : Gives a count of all the values

Series.count() : Gives the count of non-NA values

In [110]:
#Lets check if the alcohol Series has Na
alcohol.hasnans
Out[110]:
True
In [111]:
drinks.head()
Out[111]:
country beer_servings spirit_servings wine_servings total_litres_of_pure_alcohol
0 Afghanistan NaN NaN NaN NaN
1 Albania 89.0 132.0 54.0 4.9
2 Algeria 25.0 NaN 14.0 0.7
3 Andorra 245.0 138.0 312.0 12.4
4 Angola 217.0 57.0 45.0 5.9
In [112]:
drinks['beer_servings'].hasnans
Out[112]:
True
In [113]:
drinks['country'].hasnans
Out[113]:
False
In [114]:
#Lets check if the alcohol Series has Na
alcohol.hasnans
Out[114]:
True

Observation So we verified that our Series has NaNs

Accessing and Counting NAs

In [119]:
#The Total number of values in the Series is
alcohol.size
Out[119]:
193
In [118]:
#The number of non-Null values in the Series is
alcohol.count()
Out[118]:
162

Now the Question is : How do we look at the NULLs

Remember : Nulls or NAs indicate the absence of Data

What Countries in our "alcohol" Series do not have Wine Servings?

In [121]:
drinks.head()
Out[121]:
country beer_servings spirit_servings wine_servings total_litres_of_pure_alcohol
0 Afghanistan NaN NaN NaN NaN
1 Albania 89.0 132.0 54.0 4.9
2 Algeria 25.0 NaN 14.0 0.7
3 Andorra 245.0 138.0 312.0 12.4
4 Angola 217.0 57.0 45.0 5.9
In [122]:
alcohol
Out[122]:
country
Afghanistan      NaN
Albania         54.0
Algeria         14.0
Andorra        312.0
Angola          45.0
               ...  
Venezuela        3.0
Vietnam          1.0
Yemen            NaN
Zambia           4.0
Zimbabwe         4.0
Name: wine_servings, Length: 193, dtype: float64
In [123]:
alcohol.isnull()
Out[123]:
country
Afghanistan     True
Albania        False
Algeria        False
Andorra        False
Angola         False
               ...  
Venezuela      False
Vietnam        False
Yemen           True
Zambia         False
Zimbabwe       False
Name: wine_servings, Length: 193, dtype: bool
In [124]:
drinks = pd.read_csv('drinks.csv')
In [125]:
drinks.head(2)
Out[125]:
country beer_servings spirit_servings wine_servings total_litres_of_pure_alcohol
0 Afghanistan NaN NaN NaN NaN
1 Albania 89.0 132.0 54.0 4.9

Accessing and Counting NA's

In [130]:
alcohol = pd.read_csv('drinks.csv' , usecols = ['country' , 'wine_servings'] , index_col = 'country' , squeeze = True)
In [131]:
alcohol.head(5)
Out[131]:
country
Afghanistan      NaN
Albania         54.0
Algeria         14.0
Andorra        312.0
Angola          45.0
Name: wine_servings, dtype: float64
In [132]:
alcohol.size
Out[132]:
193
In [134]:
alcohol.count()
Out[134]:
162

Nulls or NAa indicate the absence of a value

What countries in our Alcohol Series do not have Wine Servings

In [140]:
alcohol.isnull()
Out[140]:
country
Afghanistan     True
Albania        False
Algeria        False
Andorra        False
Angola         False
               ...  
Venezuela      False
Vietnam        False
Yemen           True
Zambia         False
Zimbabwe       False
Name: wine_servings, Length: 193, dtype: bool

Observation

  • Afghanistan and Yemen are the two countries (isnull = True) , which do not have Wine Servings
In [139]:
type(alcohol)
Out[139]:
pandas.core.series.Series
In [142]:
#Creating a Boolean Mask
#We get back another Series with only the countries with missing Wine Serving Data are selected

alcohol[alcohol.isnull()]
Out[142]:
country
Afghanistan        NaN
Bangladesh         NaN
Bhutan             NaN
Burundi            NaN
North Korea        NaN
Eritrea            NaN
Ethiopia           NaN
India              NaN
Indonesia          NaN
Iran               NaN
Iraq               NaN
Kuwait             NaN
Lesotho            NaN
Libya              NaN
Malaysia           NaN
Maldives           NaN
Marshall Islands   NaN
Mauritania         NaN
Monaco             NaN
Myanmar            NaN
Nepal              NaN
Pakistan           NaN
Rwanda             NaN
San Marino         NaN
Saudi Arabia       NaN
Somalia            NaN
Sri Lanka          NaN
Sudan              NaN
Tajikistan         NaN
Uganda             NaN
Yemen              NaN
Name: wine_servings, dtype: float64
In [143]:
#Is we just want to look at the country names (isnull = True) or where the values are NAN
#Since Country is the index for alcohol series
#We get a Pandas object

alcohol[alcohol.isnull()].index
Out[143]:
Index(['Afghanistan', 'Bangladesh', 'Bhutan', 'Burundi', 'North Korea',
       'Eritrea', 'Ethiopia', 'India', 'Indonesia', 'Iran', 'Iraq', 'Kuwait',
       'Lesotho', 'Libya', 'Malaysia', 'Maldives', 'Marshall Islands',
       'Mauritania', 'Monaco', 'Myanmar', 'Nepal', 'Pakistan', 'Rwanda',
       'San Marino', 'Saudi Arabia', 'Somalia', 'Sri Lanka', 'Sudan',
       'Tajikistan', 'Uganda', 'Yemen'],
      dtype='object', name='country')
In [144]:
type(alcohol[alcohol.isnull()].index)
Out[144]:
pandas.core.indexes.base.Index
In [145]:
#Store it in a List
list(alcohol[alcohol.isnull()].index)
Out[145]:
['Afghanistan',
 'Bangladesh',
 'Bhutan',
 'Burundi',
 'North Korea',
 'Eritrea',
 'Ethiopia',
 'India',
 'Indonesia',
 'Iran',
 'Iraq',
 'Kuwait',
 'Lesotho',
 'Libya',
 'Malaysia',
 'Maldives',
 'Marshall Islands',
 'Mauritania',
 'Monaco',
 'Myanmar',
 'Nepal',
 'Pakistan',
 'Rwanda',
 'San Marino',
 'Saudi Arabia',
 'Somalia',
 'Sri Lanka',
 'Sudan',
 'Tajikistan',
 'Uganda',
 'Yemen']
In [147]:
#One way to count the Nulls is to find the length of the Series that was produced above
#Simply wrap the above code in a len() function
#But this is not a pythonic way

len(list(alcohol[alcohol.isnull()].index))
Out[147]:
31
In [148]:
#One of the most Pandorable way to get the count of NAN

alcohol.isnull().sum()
Out[148]:
31
In [149]:
#Booleans are integers in Python : True = 1 and False = 0
In [151]:
sum([True , False , True])  #2 Trues and 1 False = 1 + 0 + 1
Out[151]:
2
In [152]:
all = alcohol.size   #Total length
In [153]:
nonnulls = alcohol.count()   #count() does not include nulls
In [154]:
nulls = alcohol.isnull().sum()
In [155]:
print(all) 
print(nonnulls)
print(nulls)
193
162
31
In [156]:
all == nonnulls + nulls
Out[156]:
True

We can use isna in place of isnull

Series Accounting

.size : Number of elements in the series

  • series.size#193

.count() : Number of non null elements

  • seris.count() #162

.isna().sum() : number of null elements

  • series.isna().sum() #31

BONUS Approach

In [157]:
import pandas as pd
import numpy as np

This is another approach to isolate NULLS. A more elegant way.

Sequential or Vectoirised ops

Vectorization is the process of going from applying computations to each element (element wise computations) to running them on the entire collection at once.

So, Vectorization refers to the concept of running operations on entire arrays.

When we use Pandas , we are also relying on Numpy , therefore vectorization behind the scenes contributes to the performance gains relative to an approach that is based on regular Python loops, which are most commonly sequential

In [164]:
#unfunc ---> Universal Function
#We will look at np.isnan function
In [165]:
pd.Series(data=[True, False , None, 2] , dtype = float)
Out[165]:
0    1.0
1    0.0
2    NaN
3    2.0
dtype: float64
In [166]:
ser = pd.Series(data=[True, False , None, 2] , dtype = float)
In [168]:
#We pass this Series to the Numpy isnan() function
#We get back a Series of Booleans indicating whether each of the elements in the Series is null or not
np.isnan(ser)
Out[168]:
0    False
1    False
2     True
3    False
dtype: bool
In [169]:
np.isnan(ser).value_counts()
Out[169]:
False    3
True     1
dtype: int64
In [171]:
#Applying isnan() to alcohol Series

alcohol[np.isnan]
Out[171]:
country
Afghanistan        NaN
Bangladesh         NaN
Bhutan             NaN
Burundi            NaN
North Korea        NaN
Eritrea            NaN
Ethiopia           NaN
India              NaN
Indonesia          NaN
Iran               NaN
Iraq               NaN
Kuwait             NaN
Lesotho            NaN
Libya              NaN
Malaysia           NaN
Maldives           NaN
Marshall Islands   NaN
Mauritania         NaN
Monaco             NaN
Myanmar            NaN
Nepal              NaN
Pakistan           NaN
Rwanda             NaN
San Marino         NaN
Saudi Arabia       NaN
Somalia            NaN
Sri Lanka          NaN
Sudan              NaN
Tajikistan         NaN
Uganda             NaN
Yemen              NaN
Name: wine_servings, dtype: float64
In [174]:
drinks.head(2)
Out[174]:
country beer_servings spirit_servings wine_servings total_litres_of_pure_alcohol
0 Afghanistan NaN NaN NaN NaN
1 Albania 89.0 132.0 54.0 4.9
In [176]:
np.isnan(drinks.wine_servings).value_counts()
Out[176]:
False    162
True      31
Name: wine_servings, dtype: int64
In [177]:
drinks[np.isnan(drinks.wine_servings)]
Out[177]:
country beer_servings spirit_servings wine_servings total_litres_of_pure_alcohol
0 Afghanistan NaN NaN NaN NaN
13 Bangladesh NaN NaN NaN NaN
19 Bhutan 23.0 NaN NaN 0.4
27 Burundi 88.0 NaN NaN 6.3
46 North Korea NaN NaN NaN NaN
56 Eritrea 18.0 NaN NaN 0.5
58 Ethiopia 2.0 3.0 NaN 0.7
77 India 9.0 114.0 NaN 2.2
78 Indonesia 5.0 1.0 NaN 0.1
79 Iran NaN NaN NaN NaN
80 Iraq 9.0 3.0 NaN 0.2
90 Kuwait NaN NaN NaN NaN
95 Lesotho 82.0 29.0 NaN 2.8
97 Libya NaN NaN NaN NaN
102 Malaysia 13.0 4.0 NaN 0.3
103 Maldives NaN NaN NaN NaN
106 Marshall Islands NaN NaN NaN NaN
107 Mauritania NaN NaN NaN NaN
111 Monaco NaN NaN NaN NaN
116 Myanmar 5.0 1.0 NaN 0.1
119 Nepal 5.0 6.0 NaN 0.2
128 Pakistan NaN NaN NaN NaN
142 Rwanda 43.0 2.0 NaN 6.8
147 San Marino NaN NaN NaN NaN
149 Saudi Arabia NaN 5.0 NaN 0.1
158 Somalia NaN NaN NaN NaN
161 Sri Lanka 16.0 14.0 NaN 2.2
162 Sudan 8.0 13.0 NaN 1.7
168 Tajikistan 2.0 15.0 NaN 0.3
179 Uganda 45.0 9.0 NaN 8.3
190 Yemen 6.0 NaN NaN 0.1
In [178]:
drinks.columns
Out[178]:
Index(['country', 'beer_servings', 'spirit_servings', 'wine_servings',
       'total_litres_of_pure_alcohol'],
      dtype='object')
In [181]:
drinks[np.isnan(drinks.wine_servings)].shape
Out[181]:
(31, 5)
In [180]:
drinks[drinks['wine_servings'].isna()].shape
Out[180]:
(31, 5)
In [179]:
drinks[drinks['wine_servings'].isna()]
Out[179]:
country beer_servings spirit_servings wine_servings total_litres_of_pure_alcohol
0 Afghanistan NaN NaN NaN NaN
13 Bangladesh NaN NaN NaN NaN
19 Bhutan 23.0 NaN NaN 0.4
27 Burundi 88.0 NaN NaN 6.3
46 North Korea NaN NaN NaN NaN
56 Eritrea 18.0 NaN NaN 0.5
58 Ethiopia 2.0 3.0 NaN 0.7
77 India 9.0 114.0 NaN 2.2
78 Indonesia 5.0 1.0 NaN 0.1
79 Iran NaN NaN NaN NaN
80 Iraq 9.0 3.0 NaN 0.2
90 Kuwait NaN NaN NaN NaN
95 Lesotho 82.0 29.0 NaN 2.8
97 Libya NaN NaN NaN NaN
102 Malaysia 13.0 4.0 NaN 0.3
103 Maldives NaN NaN NaN NaN
106 Marshall Islands NaN NaN NaN NaN
107 Mauritania NaN NaN NaN NaN
111 Monaco NaN NaN NaN NaN
116 Myanmar 5.0 1.0 NaN 0.1
119 Nepal 5.0 6.0 NaN 0.2
128 Pakistan NaN NaN NaN NaN
142 Rwanda 43.0 2.0 NaN 6.8
147 San Marino NaN NaN NaN NaN
149 Saudi Arabia NaN 5.0 NaN 0.1
158 Somalia NaN NaN NaN NaN
161 Sri Lanka 16.0 14.0 NaN 2.2
162 Sudan 8.0 13.0 NaN 1.7
168 Tajikistan 2.0 15.0 NaN 0.3
179 Uganda 45.0 9.0 NaN 8.3
190 Yemen 6.0 NaN NaN 0.1

OR

In [182]:
#To check the length of the resulting Series 
alcohol[np.isnan].size
Out[182]:
31
In [183]:
len(alcohol[np.isnan])
Out[183]:
31
In [184]:
alcohol[np.isnan].shape
Out[184]:
(31,)

What if we are interested in everything except nulls

notnull() and notna()

notnull() will return a series of Booleans indicating whether each record is null or not

But here , this time : "True" values are identified as notnull()

In [185]:
alcohol.notnull()
Out[185]:
country
Afghanistan    False
Albania         True
Algeria         True
Andorra         True
Angola          True
               ...  
Venezuela       True
Vietnam         True
Yemen          False
Zambia          True
Zimbabwe        True
Name: wine_servings, Length: 193, dtype: bool
In [190]:
#We can use this resulting series as a Boolean mask in indexing for nulls only

alcohol.loc[alcohol.notnull()]
Out[190]:
country
Albania               54.0
Algeria               14.0
Andorra              312.0
Angola                45.0
Antigua & Barbuda     45.0
                     ...  
Vanuatu               11.0
Venezuela              3.0
Vietnam                1.0
Zambia                 4.0
Zimbabwe               4.0
Name: wine_servings, Length: 162, dtype: float64

Observation

  • We now see the countries which have the wine servings
In [189]:
drinks[drinks['wine_servings'].notnull()]
Out[189]:
country beer_servings spirit_servings wine_servings total_litres_of_pure_alcohol
1 Albania 89.0 132.0 54.0 4.9
2 Algeria 25.0 NaN 14.0 0.7
3 Andorra 245.0 138.0 312.0 12.4
4 Angola 217.0 57.0 45.0 5.9
5 Antigua & Barbuda 12.0 128.0 45.0 4.9
... ... ... ... ... ...
187 Vanuatu 21.0 18.0 11.0 0.9
188 Venezuela 333.0 1.0 3.0 7.7
189 Vietnam 111.0 2.0 1.0 2.0
191 Zambia 32.0 19.0 4.0 2.5
192 Zimbabwe 64.0 18.0 4.0 4.7

162 rows × 5 columns

In [191]:
#Get the sum of not null
alcohol.notnull().sum()
Out[191]:
162
In [199]:
#Lets check if the count of not null + count of null == the size of the Series
alcohol.notnull().sum() + alcohol.isnull().sum() == alcohol.size
Out[199]:
True

OR

In [195]:
print(drinks.wine_servings.notnull().sum())
print(drinks.wine_servings.isnull().sum())
print(drinks.wine_servings.size)
162
31
193
In [198]:
162 + 31
Out[198]:
193
In [196]:
drinks.wine_servings.notnull().sum() + drinks.wine_servings.isnull().sum() == drinks.wine_servings.size
Out[196]:
True

notnull() is same as notna()

In [200]:
drinks.wine_servings.notna().sum() + drinks.wine_servings.isnull().sum() == drinks.wine_servings.size
Out[200]:
True

Booleans are literally numbers in Pythons

Bools as Ints

  • True ----> 1
  • False ----> 0

The bool type inherits from (is a subclass of) int

bool --> int --> object

In [201]:
#Example :

True + 19
Out[201]:
20
In [203]:
True + True - False + True * 3
Out[203]:
5
In [204]:
1 + 1 - 0 + 1 * 3
Out[204]:
5
In [206]:
type(True)
Out[206]:
bool
In [207]:
type(False)
Out[207]:
bool

SKILL Challenge

1. Isolate the non-nulls in the alcohol series and assign them to the variable wine_servings.

In [210]:
wine_servings = alcohol[alcohol.notna()]

2. What is the Total wine consumed by all the countries in wine_servings?

In [212]:
wine_servings.sum()
Out[212]:
8221.0

3. In the wine_servings dataset , what was the total wine consumed by countries that consumed less than 100 servings?

Hint : Apply a Boolean mask to identify such countries , than sum()

In [213]:
wine_servings.head(2)
Out[213]:
country
Albania    54.0
Algeria    14.0
Name: wine_servings, dtype: float64
In [215]:
wine_servings[wine_servings < 100].shape
Out[215]:
(132,)
In [216]:
wine_servings[wine_servings > 100].shape
Out[216]:
(30,)
In [217]:
wine_servings[wine_servings < 100].sum()
Out[217]:
2416.0

Dropping and Filling NAs

We want to completely exclude NAs from our series

In [218]:
#dropna() simply excludes NAs and returns a new Series
alcohol.dropna()
Out[218]:
country
Albania               54.0
Algeria               14.0
Andorra              312.0
Angola                45.0
Antigua & Barbuda     45.0
                     ...  
Vanuatu               11.0
Venezuela              3.0
Vietnam                1.0
Zambia                 4.0
Zimbabwe               4.0
Name: wine_servings, Length: 162, dtype: float64
In [221]:
#One way re-assignment
#alcohol = alcohol.dropna()
In [222]:
#Another way : inplace parameter
#alcohol.dropna(inplace = True)

We can replace the NAs with something more meaningful

OR Something that is more analytically useful for us

fillna() method

In the fillna() method we can specify what values we want to replace with and also pass the inplace parameter

In [ ]:
#alcohol.fillna(100 , inplace = True)
In [224]:
alcohol.fillna(100 , inplace = False)
Out[224]:
country
Afghanistan    100.0
Albania         54.0
Algeria         14.0
Andorra        312.0
Angola          45.0
               ...  
Venezuela        3.0
Vietnam          1.0
Yemen          100.0
Zambia           4.0
Zimbabwe         4.0
Name: wine_servings, Length: 193, dtype: float64

Note : Both .dropna() and .fillna() methods return a copy of the series unless we specify inplace = True

Descriptive Statistics

Metrics that allow us to characterise or Describe our Data

What is the Total Wine consumption across all countries in the dataset?

In [226]:
#We simply apply the sum() function to the Series itself 
#Quick thing to note here is the NAs will be automatically excluded from this calculation
In [225]:
alcohol.sum()
Out[225]:
8221.0

Observation

  • We see that more than 8000 servings of wine were consumed in 2010

But in itself , this number is not very meaningful. For example we don't know how this total consumption is distributed. How many countries are contributing to this Total and by how much , on Average ? what the Median is? and so on

In [229]:
#Average wine consumption across all the countries
#To calculate the Average we can make use of two functions 
#We combine sum() with count()
#count() will give us the number of items which do not have null values
#By dividing sum by count we get the Average
In [228]:
alcohol.count()
Out[228]:
162
In [230]:
alcohol.sum() / alcohol.count()
Out[230]:
50.74691358024691

OR

In [231]:
alcohol.mean()
Out[231]:
50.74691358024691

MEDIAN

In [232]:
#Median is the middle most number

image.png

If we have a list containing Odd number of items like above , the median is simply the middle most element

But when we have an even list of numbers , we take the average of the two middlemost numbers

  • We sort the list and take the two middle most elements and take the Average

image.png

In [233]:
#median

alcohol.median()
Out[233]:
11.5

Another way of looking at the Median is by ordering our Data and looking at the 50th Quantile . In Pandas we can do this by using the Quantile method.

In [234]:
alcohol.quantile(q = 0.5)
Out[234]:
11.5

or

In [235]:
alcohol.quantile(0.5)
Out[235]:
11.5

One thing to note here is :

In [237]:
print("The MEAN in the alcohol Series is so much higher than the Median : " + str(alcohol.mean()) + " > " + str(alcohol.median()) )
The MEAN in the alcohol Series is so much higher than the Median : 50.74691358024691 > 11.5

This indicates that the Distribution of Wine_Servings is Right skewed or Positively skewed.

image.png

Positively skewed means , There are countries with large wine_servings that distort our mean but not much change our median.

The mean is the average or the most common value in a collection of numbers.

Statistics is the study of how to collect, Organize , Analyze and interpret Numerical information and data.

Statistics is used in HEalthcare and other disciplines too to help aid in Decision making. Understanding statistics is necesary to understand certain processes in healthcare . (To figure out what to do ? not How we do?)

Entire Population = Census

Descriptive Statistics invlove methods of organizing , picturing and Summarizing information from Samples and Populations.

Inferential Statistics invloves methods of using information from a Sample to draw conclusions regarding the Population.Therefore Inferential Statistics can only be done ON a Sample. We are trying to infer from the Sample.

Variables are of two types : Qualitative and Quantitative

Quantitative variables : Interval and Ratio

Basic Guidelines for planning a Statisctical Study:

  1. State a Hypothesis
  2. Identify the Individuals of interest

(Individuals could be anything : hospitals , people , students , banks , Products)

  1. You have to measure the variables about these indivisuals . So, Step 3 is to "Specify all of the Variables" you will need to measure about these individuals (ofcourse they relate to the Hypothesis)

  2. STep 4 is to determine whether you want to use the entire population in your study or just the Sample.

    • If you choose a sample , choose a Sampling method.
  3. Now that you figured out your Hypothesis , you got your individuals , you got your variables. You figured out whether you are going to use a sample or a population. You selected your sampling method. Now the Step 5 is to "Address the ethical concerns before Data Collection" . Asking some sesitive Questions, you think about privacy. So, you have to sit down and think about these Ethical concerns.

  4. Now its time for data Collection.

Remember: stating a Hypothesis is the most important part. without that , you will not even know what data to collect.

  1. You either use Descriptive or Inferential Statistics to answer your Hypothesis.

  2. Note any concerns about your Data Collection or Analysis. Make recommendations for future studies.

Example : STEPS 1 to 3

image.png

Sampling Ethics and Data Collection

  • Either Collect Data or use existing Dataset
  • Can use a government Dataset for Population mesasures

Can collect data from a Sample for Estimates

  • Need to choose Sampling approach
  • Will need consent if legally found to be "Human Research"
  • May need consent from parents to collect data about Children

Population is also called a Census

  • In a Census , measurements or Observations from the entire Population are used.
  • In a Sample , measurements or Observations from part of the Population are used.

Because if you pick a Census , you will do a different kind of Analysis and if you pick a sample you will do a different kind of Analysis

Frequency Histogram

Frequency Histogram is a Specific type of Bar chart made from data in a Frequency table.

Both Frequency Histograms and Relative Frequency Histograms are type of Bar Charts.

Histograms reveal the Distribution of Data.

This is how a Frequency Table looks like. Here we have added "RElative Frequency" column as well

image.png

Relative Frequency is nothing but the Proportion or percentage:

image.png

But ultimately you will get the same pattern in your Histogram , whether you use Frequency or Relative Frequency

What is a Distribution ?

  • Distribution is actually just the SHAPE
  • It is the shape that is made if you draw a line along the edges of a Histogram's Bars.

image.png

5 Main Types of Distributions

  1. Normal Distribution (Also called mound-shaped symmetrical)
  2. Uniform Distribution
  3. Skewed Left Distribution
  4. Skewed Right Distribution
  5. Bimodal Distribution

Normal Distribution:

image.png

Uniform Distribution

image.png

Skewed Left Disttibution

image.png

Skewed Right Distribution

image.png

Bimodal Distribution

image.png

image.png

Cumulative Frequency

Its like keep accumulating things :

image.png

BAR Graph : A Bar graph can display Quantitative or Qualitative Data

  • Bars can be vertical or Horizontal
  • The Frequency Histogram and Relative Frequency Histogram are Special cases of a Bar Graph:
  • When you are comparing bar charts (before and After) make sure you use the same scale

image.png

PARETO Chart

Pareto chart is a different kind of Special bar graph

image.png

  • Here the height of the Bar indcates the Frequency of an Event.
  • Example : Look at the tallest bar "Damaged Radar Core" happened 31 times.
  • Pareto charts are not used much in Healthcare
  • This is a Qualitative PIE chart image.png
  • This is a Quantitative PIE chart

image.png

Remember : "FREQUENCY" is always about Quantitative Data

Mesaures of Central Tendency

  • Mode
  • Median
  • Mean

image.png

Left looks more centery and right is Skewed

image.png

MODE :

  • Mode is the number in the dataset that occurs Most Frequently
  • It is possible to have No Mode

image.png

In [ ]:
A lot of Datasets have no mode. There is just no repeated value in them.
In [4]:
import numpy as np 
import pandas as pd

test_mode = pd.Series( [1,2,3,4,5])
In [8]:
test_mode.mode()
Out[8]:
0    1
1    2
2    3
3    4
4    5
dtype: int64

Is is also possible to have more than one MODE

image.png

In [16]:
test_mode = pd.Series( [1,2,2,3,4,5,3,4,5])
In [17]:
test_mode.mode()
Out[17]:
0    2
1    3
2    4
3    5
dtype: int64

What does the MODE tell you?

  • Not much
  • The most "Popular" answer
  • The Most common Result
  • Not used a lot in healthcare
  • So, the MODE is not a Robust measure (Just if one value is added or removed , the Mode may change)
  • Specially in healthcare

MEDIAN

  • Its the Middle of the Data
  • MEDIAN is the centre of the Data
  • Every set of Quantitative Data can be sorted in order of Lowest to highest
  • Sometimes there are Repeats in the Data
  • Sometimes there are Outliers
  • Sometimes all the Data values are almost the same
  • Even So, they can be arranged in order
  • The Median is the number that is halfway
  • So, when you take the values , put them in order and count halfway up , thats what the Median is going to be.

How to find the MEDIAN

  • Order the Data from smallest to largest
  • 42 , 33, 21 , 78 ,62
In [24]:
median_test = [42 , 33, 21 , 78 ,62]
In [25]:
sorted_median_test_ODD = sorted(median_test)
In [26]:
#This is the odd version
sorted_median_test_ODD
Out[26]:
[21, 33, 42, 62, 78]
In [27]:
median_test = [12 , 7 , 3, 8 ,1 ,9]
In [28]:
sorted_median_test_EVEN = sorted(median_test)
In [29]:
sorted_median_test_EVEN
Out[29]:
[1, 3, 7, 8, 9, 12]
In [30]:
#We have ordered the Data from smallest to largest in both the lists
#sorted_median_test_EVEN and sorted_median_test_ODD

If there is an ODD number of values, the MEDIAN is the Middle data value

In [31]:
sorted_median_test_ODD
Out[31]:
[21, 33, 42, 62, 78]
In [33]:
ODD = pd.Series(sorted_median_test_ODD)
In [34]:
ODD.median()
Out[34]:
42.0

If there is an Even number of values , the MEDIAN is the Sum of the middle two values divided by 2

In [35]:
sorted_median_test_EVEN
Out[35]:
[1, 3, 7, 8, 9, 12]
In [37]:
EVEN = pd.Series(sorted_median_test_EVEN)
In [38]:
EVEN.median()
Out[38]:
7.5

image.png

But what if you have a hundered and fifty numbers?

  • You can still arrange them in order
  • After arranging the values in Order, you have an "Ordered Set"

image.png

image.png

What does the MEDIAN tell you ?

- The 50th Percentile of the Data

What it means is , 50% or half of the Data Points are below the MEDIAN and the other half are above.

And so, its also known as the Middle Rank of the Data

Whats nice about the MEDIAN is, it doesn't really care about the ends of the Data. And OUTLIERS don't really bother it. This way MEDIAN is very RESISTANT . Its very STABLE.

MEAN , TRIMMED MEAN and WEIGHTED AVERAGE

image.png

image.png

image.png

  • MEAN is not resistant to Outliers
  • MEAN is not very stable (If there is a higher value , it will change drastically)
  • What can you do to try and make the MEAN more stable? image.png
  • We can trin data off from each end, so the Outliers get Cut off.
  • This way , you might lose some data
  • Lets look at another way of doing this :
  • Lets say you have 100 Data points
  • And you want to trim 5% of the data from top ans 5% from the bottom
  • 5% of 100% is just 5 data points
  • So, you go ahead and put the data in order(sort)
  • And cut off 5 each from top and bottom
  • So, you got 90 values left in the middle
  • Now you make a MEAN out of them
  • And thats a 5% trim
  • And then you have to tell the people that - Here's the original MEAN and here's the 5% trimmed MEAN.
  • This might give you a stable estimate of the MEAN

image.png

image.png

Whats happening in the Right Skewed Distribution?

  • The MEAN is getting dragged around by that TAIL
  • You can see that the MEAN is at the RIGHT side of the MEDIAN

image.png

Here the MEDIAN is more resistant , its sort of hanging on to the bottom of the Data. But the Right TAIL is pulling the MEAN up and the MODE is the lowest one.

  • So if i get this Printout where MEAN is towards the right and MEDIAN is in the centre
  • Meaning MEAN is the highest , we can say even without looking at the Histogram, this is RIGHT Skewed

LEFT Skewed Distribution:

- Here the tail is dragging the MEAN down , notice the MEDIAN is more resistant , does not get dragged as much

image.png

And the MODE stays at the higher part of the Data where there is more Data

  • So if i get a printout and notice the MEAN is the lowest , MEDIAN is in the middle and the MODE is the highest
  • I will understand this is LEFT Skewed

EDA : Exploratory Data Analysis is the first step in Data analysis

image.png

For categorical vaiables , we can look at the MODE

Webscraping Data using Pandas

In [60]:
import pandas as pd
#Retrieve HTML table Data
url = 'https://www.basketball-reference.com/leagues/NBA_2019_per_game.html'
html = pd.read_html(url , header = 0)  #0 row is the header
df2019 = html[0]
In [61]:
html
Out[61]:
[      Rk        Player Pos Age   Tm   G  GS    MP   FG   FGA  ...   FT%  ORB  \
 0      1  Álex Abrines  SG  25  OKC  31   2  19.0  1.8   5.1  ...  .923  0.2   
 1      2    Quincy Acy  PF  28  PHO  10   0  12.3  0.4   1.8  ...  .700  0.3   
 2      3  Jaylen Adams  PG  22  ATL  34   1  12.6  1.1   3.2  ...  .778  0.3   
 3      4  Steven Adams   C  25  OKC  80  80  33.4  6.0  10.1  ...  .500  4.9   
 4      5   Bam Adebayo   C  21  MIA  82  28  23.3  3.4   5.9  ...  .735  2.0   
 ..   ...           ...  ..  ..  ...  ..  ..   ...  ...   ...  ...   ...  ...   
 729  528  Tyler Zeller   C  29  MEM   4   1  20.5  4.0   7.0  ...  .778  2.3   
 730  529    Ante Žižić   C  22  CLE  59  25  18.3  3.1   5.6  ...  .705  1.8   
 731  530   Ivica Zubac   C  21  TOT  59  37  17.6  3.6   6.4  ...  .802  1.9   
 732  530   Ivica Zubac   C  21  LAL  33  12  15.6  3.4   5.8  ...  .864  1.6   
 733  530   Ivica Zubac   C  21  LAC  26  25  20.2  3.8   7.2  ...  .733  2.3   
 
      DRB  TRB  AST  STL  BLK  TOV   PF   PTS  
 0    1.4  1.5  0.6  0.5  0.2  0.5  1.7   5.3  
 1    2.2  2.5  0.8  0.1  0.4  0.4  2.4   1.7  
 2    1.4  1.8  1.9  0.4  0.1  0.8  1.3   3.2  
 3    4.6  9.5  1.6  1.5  1.0  1.7  2.6  13.9  
 4    5.3  7.3  2.2  0.9  0.8  1.5  2.5   8.9  
 ..   ...  ...  ...  ...  ...  ...  ...   ...  
 729  2.3  4.5  0.8  0.3  0.8  1.0  4.0  11.5  
 730  3.6  5.4  0.9  0.2  0.4  1.0  1.9   7.8  
 731  4.2  6.1  1.1  0.2  0.9  1.2  2.3   8.9  
 732  3.3  4.9  0.8  0.1  0.8  1.0  2.2   8.5  
 733  5.3  7.7  1.5  0.4  0.9  1.4  2.5   9.4  
 
 [734 rows x 30 columns]]
In [62]:
df2019
Out[62]:
Rk Player Pos Age Tm G GS MP FG FGA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS
0 1 Álex Abrines SG 25 OKC 31 2 19.0 1.8 5.1 ... .923 0.2 1.4 1.5 0.6 0.5 0.2 0.5 1.7 5.3
1 2 Quincy Acy PF 28 PHO 10 0 12.3 0.4 1.8 ... .700 0.3 2.2 2.5 0.8 0.1 0.4 0.4 2.4 1.7
2 3 Jaylen Adams PG 22 ATL 34 1 12.6 1.1 3.2 ... .778 0.3 1.4 1.8 1.9 0.4 0.1 0.8 1.3 3.2
3 4 Steven Adams C 25 OKC 80 80 33.4 6.0 10.1 ... .500 4.9 4.6 9.5 1.6 1.5 1.0 1.7 2.6 13.9
4 5 Bam Adebayo C 21 MIA 82 28 23.3 3.4 5.9 ... .735 2.0 5.3 7.3 2.2 0.9 0.8 1.5 2.5 8.9
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
729 528 Tyler Zeller C 29 MEM 4 1 20.5 4.0 7.0 ... .778 2.3 2.3 4.5 0.8 0.3 0.8 1.0 4.0 11.5
730 529 Ante Žižić C 22 CLE 59 25 18.3 3.1 5.6 ... .705 1.8 3.6 5.4 0.9 0.2 0.4 1.0 1.9 7.8
731 530 Ivica Zubac C 21 TOT 59 37 17.6 3.6 6.4 ... .802 1.9 4.2 6.1 1.1 0.2 0.9 1.2 2.3 8.9
732 530 Ivica Zubac C 21 LAL 33 12 15.6 3.4 5.8 ... .864 1.6 3.3 4.9 0.8 0.1 0.8 1.0 2.2 8.5
733 530 Ivica Zubac C 21 LAC 26 25 20.2 3.8 7.2 ... .733 2.3 5.3 7.7 1.5 0.4 0.9 1.4 2.5 9.4

734 rows × 30 columns

In [63]:
df2019[df2019.Age == 'Age']
Out[63]:
Rk Player Pos Age Tm G GS MP FG FGA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS
22 Rk Player Pos Age Tm G GS MP FG FGA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS
49 Rk Player Pos Age Tm G GS MP FG FGA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS
70 Rk Player Pos Age Tm G GS MP FG FGA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS
97 Rk Player Pos Age Tm G GS MP FG FGA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS
132 Rk Player Pos Age Tm G GS MP FG FGA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS
161 Rk Player Pos Age Tm G GS MP FG FGA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS
186 Rk Player Pos Age Tm G GS MP FG FGA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS
217 Rk Player Pos Age Tm G GS MP FG FGA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS
244 Rk Player Pos Age Tm G GS MP FG FGA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS
269 Rk Player Pos Age Tm G GS MP FG FGA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS
299 Rk Player Pos Age Tm G GS MP FG FGA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS
326 Rk Player Pos Age Tm G GS MP FG FGA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS
349 Rk Player Pos Age Tm G GS MP FG FGA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS
382 Rk Player Pos Age Tm G GS MP FG FGA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS
411 Rk Player Pos Age Tm G GS MP FG FGA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS
438 Rk Player Pos Age Tm G GS MP FG FGA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS
468 Rk Player Pos Age Tm G GS MP FG FGA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS
498 Rk Player Pos Age Tm G GS MP FG FGA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS
527 Rk Player Pos Age Tm G GS MP FG FGA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS
554 Rk Player Pos Age Tm G GS MP FG FGA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS
579 Rk Player Pos Age Tm G GS MP FG FGA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS
604 Rk Player Pos Age Tm G GS MP FG FGA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS
642 Rk Player Pos Age Tm G GS MP FG FGA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS
671 Rk Player Pos Age Tm G GS MP FG FGA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS
694 Rk Player Pos Age Tm G GS MP FG FGA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS
715 Rk Player Pos Age Tm G GS MP FG FGA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS

26 rows × 30 columns

In [65]:
df2019[df2019.Age == 'Age'].index #these are the indexes from which we have to drop
Out[65]:
Int64Index([ 22,  49,  70,  97, 132, 161, 186, 217, 244, 269, 299, 326, 349,
            382, 411, 438, 468, 498, 527, 554, 579, 604, 642, 671, 694, 715],
           dtype='int64')
In [67]:
#Dropping all the headers that are Redundant
In [66]:
#Data Cleaning 
raw = df2019.drop(df2019[df2019.Age == 'Age'].index)
In [68]:
raw.head()
Out[68]:
Rk Player Pos Age Tm G GS MP FG FGA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS
0 1 Álex Abrines SG 25 OKC 31 2 19.0 1.8 5.1 ... .923 0.2 1.4 1.5 0.6 0.5 0.2 0.5 1.7 5.3
1 2 Quincy Acy PF 28 PHO 10 0 12.3 0.4 1.8 ... .700 0.3 2.2 2.5 0.8 0.1 0.4 0.4 2.4 1.7
2 3 Jaylen Adams PG 22 ATL 34 1 12.6 1.1 3.2 ... .778 0.3 1.4 1.8 1.9 0.4 0.1 0.8 1.3 3.2
3 4 Steven Adams C 25 OKC 80 80 33.4 6.0 10.1 ... .500 4.9 4.6 9.5 1.6 1.5 1.0 1.7 2.6 13.9
4 5 Bam Adebayo C 21 MIA 82 28 23.3 3.4 5.9 ... .735 2.0 5.3 7.3 2.2 0.9 0.8 1.5 2.5 8.9

5 rows × 30 columns

In [69]:
#Data Dimension

raw.shape
Out[69]:
(708, 30)
In [72]:
#Check for missing values
raw.isnull().sum().head(4)
Out[72]:
Rk        0
Player    0
Pos       0
Age       0
dtype: int64
In [74]:
#Filling all the missing values with 0
df = raw.fillna(0)
In [77]:
#Write to CSV File
df.to_csv('nba2019.csv' , index = False)
In [80]:
#Type ls to check if the File has been created
%ls
 Volume in drive D is Data
 Volume Serial Number is 4E4B-29A1

 Directory of D:\MY_JUPYTER\Bootcamp

11/13/2022  11:05 AM    <DIR>          .
11/13/2022  11:05 AM    <DIR>          ..
11/01/2022  07:55 AM    <DIR>          .ipynb_checkpoints
10/30/2022  09:49 AM             7,460 CardioGoodFitness.csv
11/01/2022  07:35 PM             4,181 drinks.csv
11/13/2022  11:04 AM            93,731 nba2019.csv
11/13/2022  11:05 AM         7,710,841 Pandas-Bootcamp-Part2.ipynb
               4 File(s)      7,816,213 bytes
               3 Dir(s)  326,835,412,992 bytes free
In [97]:
#We read the Data back in
df = pd.read_csv('nba2019.csv')
In [98]:
df.shape
Out[98]:
(708, 30)
In [99]:
df.shape[0]
Out[99]:
708
In [102]:
#We want no beaks between , we wamt to see all of the rows
pd.set_option('display.max_rows' , df.shape[0] + 1)
In [103]:
df
Out[103]:
Rk Player Pos Age Tm G GS MP FG FGA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS
0 1 Álex Abrines SG 25 OKC 31 2 19.0 1.8 5.1 ... 0.923 0.2 1.4 1.5 0.6 0.5 0.2 0.5 1.7 5.3
1 2 Quincy Acy PF 28 PHO 10 0 12.3 0.4 1.8 ... 0.700 0.3 2.2 2.5 0.8 0.1 0.4 0.4 2.4 1.7
2 3 Jaylen Adams PG 22 ATL 34 1 12.6 1.1 3.2 ... 0.778 0.3 1.4 1.8 1.9 0.4 0.1 0.8 1.3 3.2
3 4 Steven Adams C 25 OKC 80 80 33.4 6.0 10.1 ... 0.500 4.9 4.6 9.5 1.6 1.5 1.0 1.7 2.6 13.9
4 5 Bam Adebayo C 21 MIA 82 28 23.3 3.4 5.9 ... 0.735 2.0 5.3 7.3 2.2 0.9 0.8 1.5 2.5 8.9
5 6 Deng Adel SF 21 CLE 19 3 10.2 0.6 1.9 ... 1.000 0.2 0.8 1.0 0.3 0.1 0.2 0.3 0.7 1.7
6 7 DeVaughn Akoon-Purcell SG 25 DEN 7 0 3.1 0.4 1.4 ... 0.500 0.1 0.4 0.6 0.9 0.3 0.0 0.3 0.6 1.0
7 8 LaMarcus Aldridge C 33 SAS 81 81 33.2 8.4 16.3 ... 0.847 3.1 6.1 9.2 2.4 0.5 1.3 1.8 2.2 21.3
8 9 Rawle Alkins SG 21 CHI 10 1 12.0 1.3 3.9 ... 0.667 1.1 1.5 2.6 1.3 0.1 0.0 0.8 0.7 3.7
9 10 Grayson Allen SG 23 UTA 38 2 10.9 1.8 4.7 ... 0.750 0.1 0.5 0.6 0.7 0.2 0.2 0.9 1.2 5.6
10 11 Jarrett Allen C 20 BRK 80 80 26.2 4.2 7.1 ... 0.709 2.4 6.0 8.4 1.4 0.5 1.5 1.3 2.3 10.9
11 12 Kadeem Allen PG 26 NYK 19 1 21.9 3.4 7.4 ... 0.778 0.4 2.3 2.7 4.0 0.8 0.2 1.4 2.4 9.9
12 13 Al-Farouq Aminu PF 28 POR 81 81 28.3 3.2 7.3 ... 0.867 1.4 6.1 7.5 1.3 0.8 0.4 0.9 1.8 9.4
13 14 Justin Anderson SF 25 ATL 48 4 9.6 1.3 3.3 ... 0.743 0.5 1.3 1.8 0.5 0.5 0.3 0.5 1.0 3.7
14 15 Kyle Anderson SF 25 MEM 43 40 29.8 3.5 6.4 ... 0.578 1.1 4.7 5.8 3.0 1.3 0.9 1.3 2.6 8.0
15 16 Ryan Anderson PF 30 TOT 25 8 12.9 0.8 2.8 ... 0.750 0.7 1.4 2.2 0.8 0.2 0.0 0.6 1.0 2.5
16 16 Ryan Anderson PF 30 PHO 15 8 18.5 1.3 4.0 ... 0.786 0.9 2.1 3.0 1.1 0.2 0.1 0.8 1.5 3.7
17 16 Ryan Anderson PF 30 MIA 10 0 4.4 0.2 0.9 ... 0.500 0.4 0.5 0.9 0.2 0.1 0.0 0.2 0.2 0.7
18 17 Ike Anigbogu C 20 IND 3 0 2.0 0.0 1.0 ... 0.000 0.3 0.7 1.0 0.3 0.0 0.3 0.3 0.0 0.0
19 18 Giannis Antetokounmpo PF 24 MIL 72 72 32.8 10.0 17.3 ... 0.729 2.2 10.3 12.5 5.9 1.3 1.5 3.7 3.2 27.7
20 19 Kostas Antetokounmpo PF 21 DAL 2 0 5.5 0.0 1.5 ... 0.500 0.0 0.5 0.5 0.0 1.0 0.0 0.5 0.0 1.0
21 20 Carmelo Anthony PF 34 HOU 10 2 29.4 4.9 12.1 ... 0.682 0.9 4.5 5.4 0.5 0.4 0.7 0.8 3.2 13.4
22 21 OG Anunoby SF 21 TOR 67 6 20.2 2.7 6.0 ... 0.581 0.9 2.1 2.9 0.7 0.7 0.3 0.8 2.1 7.0
23 22 Ryan Arcidiacono PG 24 CHI 81 32 24.2 2.3 5.2 ... 0.873 0.3 2.4 2.7 3.3 0.8 0.0 0.8 2.1 6.7
24 23 Trevor Ariza SF 33 TOT 69 69 34.0 4.3 10.7 ... 0.793 0.7 4.7 5.4 3.7 1.3 0.3 1.5 1.9 12.5
25 23 Trevor Ariza SF 33 PHO 26 26 34.0 3.3 8.7 ... 0.837 0.6 5.0 5.6 3.3 1.5 0.3 1.5 1.7 9.9
26 23 Trevor Ariza SF 33 WAS 43 43 34.1 4.8 11.8 ... 0.777 0.8 4.5 5.3 3.8 1.2 0.3 1.6 2.0 14.1
27 24 D.J. Augustin PG 31 ORL 81 81 28.0 3.9 8.4 ... 0.866 0.5 2.0 2.5 5.3 0.6 0.0 1.6 1.4 11.7
28 25 Deandre Ayton C 20 PHO 71 70 30.7 7.2 12.3 ... 0.746 3.1 7.1 10.3 1.8 0.9 0.9 1.8 2.9 16.3
29 26 Dwayne Bacon SG 23 CHO 43 13 17.7 2.8 6.0 ... 0.739 0.2 1.9 2.1 1.1 0.3 0.1 0.4 1.7 7.3
30 27 Marvin Bagley III PF 19 SAC 62 4 25.3 5.7 11.4 ... 0.691 2.6 5.0 7.6 1.0 0.5 1.0 1.6 1.9 14.9
31 28 Ron Baker SG 25 TOT 15 0 10.1 0.3 1.3 ... 0.833 0.1 0.7 0.7 1.0 0.4 0.1 0.3 1.2 0.9
32 28 Ron Baker SG 25 NYK 11 0 9.7 0.4 1.5 ... 0.833 0.1 0.5 0.6 1.2 0.5 0.0 0.3 1.5 1.3
33 28 Ron Baker SG 25 WAS 4 0 11.3 0.0 1.0 ... 0.000 0.0 1.0 1.0 0.5 0.3 0.3 0.5 0.5 0.0
34 29 Wade Baldwin PG 22 POR 16 0 5.9 0.6 2.1 ... 0.727 0.1 0.8 0.9 0.8 0.1 0.1 0.9 0.7 1.9
35 30 Lonzo Ball PG 21 LAL 47 45 30.3 3.9 9.7 ... 0.417 1.1 4.2 5.3 5.4 1.5 0.4 2.2 2.4 9.9
36 31 Mo Bamba C 20 ORL 47 1 16.3 2.5 5.2 ... 0.587 1.4 3.6 5.0 0.8 0.3 1.4 0.9 2.2 6.2
37 32 J.J. Barea PG 34 DAL 38 0 19.8 4.2 10.1 ... 0.705 0.3 2.2 2.5 5.6 0.6 0.0 1.9 1.3 10.9
38 33 Harrison Barnes PF-SF 26 TOT 77 77 32.9 5.6 13.3 ... 0.824 0.7 3.9 4.7 1.5 0.6 0.2 1.3 1.6 16.4
39 33 Harrison Barnes PF 26 DAL 49 49 32.3 5.9 14.6 ... 0.833 0.7 3.5 4.2 1.3 0.7 0.2 1.4 1.6 17.7
40 33 Harrison Barnes SF 26 SAC 28 28 33.9 5.0 11.1 ... 0.800 0.8 4.8 5.5 1.9 0.6 0.1 1.1 1.5 14.3
41 34 Will Barton SF 28 DEN 43 38 27.7 4.3 10.7 ... 0.770 0.7 3.9 4.6 2.9 0.4 0.5 1.5 1.9 11.5
42 35 Keita Bates-Diop SF 23 MIN 30 3 16.8 2.0 4.7 ... 0.643 0.5 2.2 2.8 0.6 0.6 0.5 0.5 1.0 5.0
43 36 Nicolas Batum SF 30 CHO 75 72 31.4 3.4 7.5 ... 0.865 0.9 4.3 5.2 3.3 0.9 0.6 1.6 1.9 9.3
44 37 Jerryd Bayless PG 30 MIN 34 6 19.3 2.4 6.8 ... 0.571 0.3 1.5 1.8 3.5 0.5 0.1 0.9 1.6 6.1
45 38 Aron Baynes C 32 BOS 51 18 16.1 2.1 4.4 ... 0.855 1.7 3.0 4.7 1.1 0.2 0.7 0.8 2.5 5.6
46 39 Kent Bazemore SG 29 ATL 67 35 24.5 4.1 10.3 ... 0.726 0.6 3.3 3.9 2.3 1.3 0.6 1.8 2.5 11.6
47 40 Bradley Beal SG 25 WAS 82 82 36.9 9.3 19.6 ... 0.808 1.1 3.9 5.0 5.5 1.5 0.7 2.7 2.8 25.6
48 41 Malik Beasley SG 22 DEN 81 18 23.2 4.3 9.1 ... 0.848 0.4 2.0 2.5 1.2 0.7 0.1 0.7 1.4 11.3
49 42 Michael Beasley PF 30 LAL 26 2 10.7 2.9 5.9 ... 0.718 0.5 1.8 2.3 1.0 0.3 0.4 1.0 1.6 7.0
50 43 Marco Belinelli SG 32 SAS 79 1 23.0 3.6 8.7 ... 0.903 0.2 2.3 2.5 1.7 0.4 0.1 0.9 1.5 10.5
51 44 Jordan Bell C 24 GSW 68 3 11.6 1.5 2.8 ... 0.610 0.8 1.9 2.7 1.1 0.3 0.8 0.6 1.2 3.3
52 45 DeAndre' Bembry SG 24 ATL 82 15 23.5 3.4 7.5 ... 0.640 0.7 3.7 4.4 2.5 1.3 0.5 1.7 2.3 8.4
53 46 Dragan Bender PF 21 PHO 46 27 18.0 1.9 4.3 ... 0.593 0.7 3.2 4.0 1.2 0.4 0.5 0.8 2.0 5.0
54 47 Dairis Bertāns SG 29 NOP 12 0 13.9 1.0 3.9 ... 0.000 0.2 0.6 0.8 0.8 0.1 0.0 0.2 0.6 2.8
55 48 Dāvis Bertāns PF 26 SAS 76 12 21.5 2.7 6.0 ... 0.883 0.3 3.2 3.5 1.3 0.5 0.4 0.6 1.8 8.0
56 49 Patrick Beverley PG 30 LAC 78 49 27.4 2.5 6.1 ... 0.780 1.0 4.0 5.0 3.8 0.9 0.6 1.1 3.4 7.6
57 50 Khem Birch C 26 ORL 50 1 12.9 1.8 3.0 ... 0.699 1.6 2.2 3.8 0.8 0.4 0.6 0.4 1.4 4.8
58 51 Bismack Biyombo C 26 CHO 54 32 14.5 1.6 2.9 ... 0.637 1.5 3.1 4.6 0.6 0.2 0.8 0.6 1.9 4.4
59 52 Nemanja Bjelica PF 30 SAC 77 70 23.2 3.7 7.7 ... 0.761 1.6 4.1 5.8 1.9 0.7 0.7 1.1 2.6 9.6
60 53 Antonio Blakeney SG 22 CHI 57 3 14.5 2.9 6.9 ... 0.658 0.1 1.7 1.9 0.7 0.2 0.2 0.6 0.7 7.3
61 54 Eric Bledsoe PG 29 MIL 78 78 29.1 6.0 12.4 ... 0.750 1.1 3.6 4.6 5.5 1.5 0.4 2.1 2.0 15.9
62 55 Jaron Blossomgame SF 25 CLE 27 4 16.3 1.7 3.9 ... 0.769 1.0 2.7 3.6 0.5 0.3 0.3 0.4 0.7 4.2
63 56 Bogdan Bogdanović SG 26 SAC 70 17 27.8 5.2 12.3 ... 0.827 0.6 2.9 3.5 3.8 1.0 0.2 1.7 2.0 14.1
64 57 Bojan Bogdanović SF 29 IND 81 81 31.8 6.4 13.0 ... 0.807 0.4 3.7 4.1 2.0 0.9 0.0 1.7 1.7 18.0
65 58 Andrew Bogut C 34 GSW 11 5 12.2 1.6 3.3 ... 1.000 1.1 3.9 5.0 1.0 0.3 0.7 0.7 2.0 3.5
66 59 Jonah Bolden PF 23 PHI 44 10 14.5 1.8 3.7 ... 0.481 1.1 2.7 3.8 0.9 0.4 0.9 0.8 2.3 4.7
67 60 Isaac Bonga PG 19 LAL 22 0 5.5 0.2 1.5 ... 0.600 0.4 0.7 1.1 0.7 0.4 0.2 0.3 0.4 0.9
68 61 Devin Booker SG 22 PHO 64 64 35.0 9.2 19.6 ... 0.866 0.6 3.5 4.1 6.8 0.9 0.2 4.1 3.1 26.6
69 62 Chris Boucher PF 26 TOR 28 0 5.8 1.2 2.7 ... 0.867 0.6 1.4 2.0 0.1 0.2 0.9 0.3 1.1 3.3
70 63 Avery Bradley SG 28 TOT 63 63 30.2 3.9 9.7 ... 0.860 0.7 2.1 2.8 2.4 0.7 0.3 1.4 2.7 9.9
71 63 Avery Bradley SG 28 LAC 49 49 29.9 3.3 8.6 ... 0.800 0.7 2.0 2.7 2.0 0.6 0.3 1.2 2.7 8.2
72 63 Avery Bradley SG 28 MEM 14 14 31.6 6.2 13.4 ... 0.920 0.6 2.6 3.1 4.0 1.0 0.0 2.0 2.4 16.1
73 64 Tony Bradley C 21 UTA 3 0 12.0 2.7 5.3 ... 0.500 3.0 2.0 5.0 0.3 0.7 0.7 1.0 2.0 5.7
74 65 Corey Brewer SF 32 TOT 31 3 15.9 1.7 4.0 ... 0.721 0.8 1.6 2.5 1.3 1.0 0.2 0.6 2.0 4.9
75 65 Corey Brewer SF 32 PHI 7 3 20.0 2.9 7.0 ... 0.692 0.6 1.9 2.4 1.4 1.7 0.3 1.1 2.3 7.6
76 65 Corey Brewer SF 32 SAC 24 0 14.7 1.4 3.1 ... 0.733 0.9 1.5 2.5 1.2 0.8 0.2 0.5 2.0 4.1
77 66 Mikal Bridges SF 22 PHO 82 56 29.5 3.0 6.9 ... 0.805 0.7 2.5 3.2 2.1 1.6 0.5 0.9 2.5 8.3
78 67 Miles Bridges SF 20 CHO 80 25 21.2 3.0 6.4 ... 0.753 0.8 3.2 4.0 1.2 0.7 0.6 0.6 1.4 7.5
79 68 Isaiah Briscoe PG 22 ORL 39 0 14.3 1.4 3.5 ... 0.577 0.1 1.8 1.9 2.2 0.3 0.1 0.8 1.7 3.5
80 69 Ryan Broekhoff SG 28 DAL 42 0 10.8 1.4 3.0 ... 0.789 0.2 1.3 1.5 0.5 0.1 0.1 0.4 0.8 4.0
81 70 Malcolm Brogdon SG 26 MIL 64 64 28.6 5.9 11.7 ... 0.928 1.0 3.5 4.5 3.2 0.7 0.2 1.4 1.6 15.6
82 71 Dillon Brooks SF 23 MEM 18 0 18.3 2.7 6.8 ... 0.733 0.5 1.2 1.7 0.9 0.6 0.2 1.1 2.8 7.5
83 72 MarShon Brooks SG 30 MEM 29 0 13.3 2.6 5.8 ... 0.697 0.4 1.1 1.6 0.9 0.3 0.1 0.7 1.1 6.6
84 73 Bruce Brown SG 22 DET 74 56 19.6 1.7 4.2 ... 0.750 0.6 1.9 2.5 1.2 0.5 0.5 0.6 2.4 4.3
85 74 Jaylen Brown SG 22 BOS 74 25 25.9 5.0 10.7 ... 0.658 0.9 3.4 4.2 1.4 0.9 0.4 1.3 2.5 13.0
86 75 Lorenzo Brown PG 28 TOR 26 0 8.2 0.9 2.7 ... 1.000 0.2 1.0 1.2 1.1 0.5 0.2 0.6 0.8 2.1
87 76 Sterling Brown SG 23 MIL 58 7 17.8 2.5 5.4 ... 0.690 0.5 2.7 3.2 1.4 0.4 0.1 0.8 1.5 6.4
88 77 Troy Brown Jr. SF 19 WAS 52 10 14.0 1.9 4.5 ... 0.681 0.7 2.1 2.8 1.5 0.4 0.1 0.6 1.1 4.8
89 78 Jalen Brunson PG 22 DAL 73 38 21.8 3.6 7.7 ... 0.725 0.3 2.0 2.3 3.2 0.5 0.1 1.2 1.7 9.3
90 79 Thomas Bryant C 21 WAS 72 53 20.8 4.3 7.0 ... 0.781 1.6 4.7 6.3 1.3 0.3 0.9 0.8 1.8 10.5
91 80 Reggie Bullock SG 27 TOT 63 60 29.8 3.9 9.4 ... 0.859 0.3 2.4 2.7 2.0 0.6 0.2 1.0 1.7 11.3
92 80 Reggie Bullock SG 27 DET 44 44 30.8 4.1 10.0 ... 0.875 0.5 2.3 2.8 2.5 0.5 0.1 1.2 1.8 12.1
93 80 Reggie Bullock SG 27 LAL 19 16 27.6 3.3 8.1 ... 0.810 0.1 2.5 2.6 1.1 0.8 0.4 0.6 1.6 9.3
94 81 Trey Burke PG 26 TOT 58 8 19.4 4.1 9.4 ... 0.831 0.5 1.2 1.7 2.7 0.6 0.1 0.8 1.0 10.9
95 81 Trey Burke PG 26 NYK 33 7 20.9 4.5 10.8 ... 0.827 0.5 1.4 1.9 2.8 0.6 0.2 0.9 1.0 11.8
96 81 Trey Burke PG 26 DAL 25 1 17.4 3.5 7.6 ... 0.837 0.5 1.0 1.5 2.6 0.5 0.1 0.8 1.0 9.7
97 82 Alec Burks SG 27 TOT 64 24 21.5 3.0 7.4 ... 0.823 0.5 3.2 3.7 2.0 0.6 0.3 1.0 1.4 8.8
98 82 Alec Burks SG 27 UTA 17 0 15.8 2.8 6.7 ... 0.868 0.1 1.5 1.6 1.2 0.4 0.2 0.9 1.3 8.4
99 82 Alec Burks SG 27 CLE 34 24 28.8 4.0 10.0 ... 0.806 0.8 4.7 5.5 2.9 0.7 0.5 1.4 1.8 11.6
100 82 Alec Burks SG 27 SAC 13 0 9.8 0.7 1.5 ... 0.800 0.2 1.5 1.7 0.8 0.6 0.1 0.3 0.5 1.7
101 83 Deonte Burton SG 25 OKC 32 0 7.5 1.0 2.6 ... 0.667 0.1 0.8 0.9 0.3 0.2 0.3 0.3 1.0 2.6
102 84 Jimmy Butler SF-SG 29 TOT 65 65 33.6 6.4 13.9 ... 0.855 1.9 3.4 5.3 4.0 1.9 0.6 1.5 1.7 18.7
103 84 Jimmy Butler SG 29 MIN 10 10 36.1 7.4 15.7 ... 0.787 1.6 3.6 5.2 4.3 2.4 1.0 1.4 1.8 21.3
104 84 Jimmy Butler SF 29 PHI 55 55 33.2 6.3 13.6 ... 0.868 1.9 3.4 5.3 4.0 1.8 0.5 1.5 1.7 18.2
105 85 Bruno Caboclo PF 23 MEM 34 19 23.5 2.8 6.6 ... 0.840 1.2 3.4 4.6 1.5 0.4 1.0 1.1 2.4 8.3
106 86 José Calderón PG 37 DET 49 0 12.9 0.9 2.4 ... 0.818 0.2 1.0 1.2 2.3 0.3 0.1 0.7 1.3 2.3
107 87 Kentavious Caldwell-Pope SG 25 LAL 82 23 24.8 4.0 9.2 ... 0.867 0.6 2.3 2.9 1.3 0.9 0.2 0.8 1.7 11.4
108 88 Isaiah Canaan PG 27 TOT 30 16 21.0 2.1 5.5 ... 0.792 0.2 1.7 1.9 2.8 0.5 0.1 1.2 1.7 6.0
109 88 Isaiah Canaan PG 27 PHO 19 15 26.5 2.7 6.8 ... 0.750 0.3 2.3 2.6 3.3 0.6 0.0 1.5 2.4 7.5
110 88 Isaiah Canaan PG 27 MIN 7 1 13.6 1.6 4.1 ... 1.000 0.0 0.7 0.7 2.7 0.3 0.1 0.6 0.6 4.7
111 88 Isaiah Canaan PG 27 MIL 4 0 7.8 0.5 1.5 ... 0.000 0.3 0.8 1.0 0.8 0.0 0.3 0.5 0.5 1.5
112 89 Clint Capela C 24 HOU 67 67 33.6 7.1 10.9 ... 0.636 4.4 8.2 12.7 1.4 0.7 1.5 1.4 2.5 16.6
113 90 DeMarre Carroll PF 32 BRK 67 8 25.4 3.4 8.6 ... 0.760 1.0 4.2 5.2 1.3 0.5 0.1 1.1 1.7 11.1
114 91 Jevon Carter PG 23 MEM 39 3 14.8 1.4 4.7 ... 0.813 0.4 1.3 1.7 1.8 0.7 0.3 0.8 1.4 4.4
115 92 Vince Carter PF 42 ATL 76 9 17.5 2.6 6.2 ... 0.712 0.4 2.1 2.6 1.1 0.6 0.4 0.6 1.9 7.4
116 93 Wendell Carter Jr. C 19 CHI 44 44 25.2 4.1 8.4 ... 0.795 2.0 5.0 7.0 1.8 0.6 1.3 1.5 3.5 10.3
117 94 Michael Carter-Williams PG 27 TOT 28 1 13.3 1.6 4.4 ... 0.604 0.7 1.8 2.5 2.5 0.7 0.5 0.7 1.7 4.8
118 94 Michael Carter-Williams PG 27 HOU 16 1 9.1 1.6 3.8 ... 0.462 0.2 0.6 0.8 1.3 0.6 0.4 0.6 1.7 4.3
119 94 Michael Carter-Williams PG 27 ORL 12 0 18.9 1.8 5.2 ... 0.741 1.3 3.4 4.8 4.1 0.9 0.8 0.8 1.8 5.4
120 95 Alex Caruso PG 24 LAL 25 4 21.2 3.1 6.9 ... 0.797 0.8 1.9 2.7 3.1 1.0 0.4 1.7 2.2 9.2
121 96 Omri Casspi SF 30 MEM 36 0 14.4 2.4 4.5 ... 0.672 0.5 2.7 3.2 0.7 0.6 0.3 0.6 1.0 6.3
122 97 Willie Cauley-Stein C 25 SAC 81 81 27.3 5.1 9.1 ... 0.551 2.2 6.1 8.4 2.4 1.2 0.6 1.0 2.8 11.9
123 98 Troy Caupain PG 23 ORL 4 0 4.0 1.0 2.0 ... 0.000 0.3 0.5 0.8 1.0 0.3 0.0 0.0 0.0 2.5
124 99 Tyler Cavanaugh PF 24 UTA 11 0 3.5 0.3 0.9 ... 1.000 0.3 0.5 0.7 0.1 0.0 0.0 0.1 0.3 0.8
125 100 Tyson Chandler C 36 TOT 55 6 15.9 1.1 1.8 ... 0.586 1.7 3.9 5.6 0.7 0.4 0.4 0.8 2.0 3.1
126 100 Tyson Chandler C 36 PHO 7 0 12.7 1.1 1.7 ... 0.556 1.0 4.6 5.6 0.9 0.3 0.1 1.0 3.0 3.7
127 100 Tyson Chandler C 36 LAL 48 6 16.4 1.1 1.8 ... 0.594 1.8 3.8 5.6 0.6 0.4 0.5 0.7 1.9 3.1
128 101 Wilson Chandler PF-SF 31 TOT 51 33 23.1 2.2 5.4 ... 0.720 0.9 3.3 4.2 1.6 0.5 0.4 0.9 2.4 6.0
129 101 Wilson Chandler PF 31 PHI 36 32 26.4 2.5 5.8 ... 0.722 1.2 3.4 4.7 2.0 0.6 0.5 1.1 2.6 6.7
130 101 Wilson Chandler SF 31 LAC 15 1 15.1 1.5 4.4 ... 0.714 0.3 2.9 3.1 0.7 0.2 0.2 0.5 1.9 4.3
131 102 Joe Chealey PG 23 CHO 1 0 8.0 1.0 3.0 ... 0.000 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 2.0
132 103 Chris Chiozza PG 23 HOU 7 0 4.7 0.3 1.1 ... 0.000 0.1 0.4 0.6 0.6 0.1 0.1 0.1 0.3 0.9
133 104 Marquese Chriss PF 21 TOT 43 2 11.6 1.6 4.2 ... 0.711 0.9 2.4 3.3 0.5 0.4 0.3 0.8 1.9 4.2
134 104 Marquese Chriss PF 21 HOU 16 0 6.5 0.7 2.1 ... 0.857 0.4 1.3 1.8 0.4 0.1 0.3 0.8 1.1 1.8
135 104 Marquese Chriss PF 21 CLE 27 2 14.6 2.1 5.4 ... 0.684 1.2 3.0 4.2 0.6 0.6 0.3 0.9 2.4 5.7
136 105 Gary Clark PF 24 HOU 51 2 12.6 1.0 3.0 ... 1.000 0.5 1.8 2.3 0.4 0.4 0.5 0.1 0.9 2.9
137 106 Ian Clark SG 27 NOP 60 6 16.2 2.5 6.4 ... 0.892 0.2 1.3 1.5 1.6 0.4 0.1 1.0 1.6 6.7
138 107 Jordan Clarkson SG 26 CLE 81 0 27.3 6.5 14.6 ... 0.844 1.0 2.3 3.3 2.4 0.7 0.2 1.7 1.4 16.8
139 108 John Collins PF 21 ATL 61 59 30.0 7.6 13.6 ... 0.763 3.6 6.2 9.8 2.0 0.4 0.6 2.0 3.3 19.5
140 109 Zach Collins C 21 POR 77 0 17.6 2.5 5.2 ... 0.746 1.4 2.8 4.2 0.9 0.3 0.9 1.0 2.3 6.6
141 110 Darren Collison PG 31 IND 76 76 28.2 4.1 8.7 ... 0.832 0.5 2.6 3.1 6.0 1.4 0.1 1.6 1.8 11.2
142 111 Bonzie Colson SF 23 MIL 8 2 12.3 1.6 4.9 ... 0.889 1.0 2.8 3.8 0.4 0.6 0.1 0.4 0.4 4.9
143 112 Mike Conley PG 31 MEM 70 70 33.5 7.0 16.0 ... 0.845 0.6 2.8 3.4 6.4 1.3 0.3 1.9 1.8 21.1
144 113 Pat Connaughton SG 26 MIL 61 2 20.7 2.7 5.7 ... 0.725 1.0 3.2 4.2 2.0 0.5 0.4 0.5 1.3 6.9
145 114 Quinn Cook PG 25 GSW 74 10 14.3 2.8 5.9 ... 0.769 0.3 1.8 2.1 1.6 0.3 0.0 0.7 1.2 6.9
146 115 DeMarcus Cousins C 28 GSW 30 30 25.7 5.9 12.4 ... 0.736 1.4 6.8 8.2 3.6 1.3 1.5 2.4 3.6 16.3
147 116 Robert Covington SF 28 TOT 35 35 34.4 4.5 10.3 ... 0.764 0.8 4.7 5.5 1.3 2.1 1.3 1.3 3.6 13.3
148 116 Robert Covington SF 28 PHI 13 13 33.8 3.8 9.0 ... 0.739 0.5 4.6 5.2 1.1 1.8 1.8 1.7 3.5 11.3
149 116 Robert Covington SF 28 MIN 22 22 34.7 4.8 11.1 ... 0.773 1.0 4.8 5.7 1.5 2.3 1.1 1.1 3.7 14.5
150 117 Allen Crabbe SG 26 BRK 43 20 26.3 3.2 8.7 ... 0.732 0.4 3.1 3.4 1.1 0.5 0.3 1.1 2.4 9.6
151 118 Torrey Craig SF 28 DEN 75 37 20.0 2.1 4.8 ... 0.700 1.2 2.3 3.5 1.0 0.5 0.6 0.6 2.3 5.7
152 119 Jamal Crawford SG 38 PHO 64 0 18.9 2.7 6.8 ... 0.845 0.1 1.2 1.3 3.6 0.5 0.2 1.5 1.2 7.9
153 120 Mitch Creek SF 26 TOT 5 0 9.6 1.6 3.2 ... 0.714 1.2 1.2 2.4 1.2 0.4 0.0 0.2 0.6 4.2
154 120 Mitch Creek SF 26 BRK 4 0 9.0 1.3 2.5 ... 0.714 1.3 1.3 2.5 1.3 0.3 0.0 0.0 0.8 3.8
155 120 Mitch Creek SF 26 MIN 1 0 12.0 3.0 6.0 ... 0.000 1.0 1.0 2.0 1.0 1.0 0.0 1.0 0.0 6.0
156 121 Jae Crowder SF 28 UTA 80 11 27.1 4.0 10.0 ... 0.721 0.8 4.1 4.8 1.7 0.8 0.4 1.1 2.1 11.9
157 122 Dante Cunningham PF 31 SAS 64 21 14.5 1.2 2.5 ... 0.778 0.8 2.2 2.9 0.8 0.4 0.2 0.3 1.1 3.0
158 123 Seth Curry SG 28 POR 74 2 18.9 2.9 6.3 ... 0.846 0.4 1.3 1.6 0.9 0.5 0.2 0.8 1.3 7.9
159 124 Stephen Curry PG 30 GSW 69 69 33.8 9.2 19.4 ... 0.916 0.7 4.7 5.3 5.2 1.3 0.4 2.8 2.4 27.3
160 125 Troy Daniels SG 27 PHO 51 1 14.9 2.2 5.4 ... 0.783 0.3 1.2 1.4 0.5 0.5 0.1 0.5 1.5 6.2
161 126 Anthony Davis C 25 NOP 56 56 33.0 9.5 18.3 ... 0.794 3.1 8.9 12.0 3.9 1.6 2.4 2.0 2.4 25.9
162 127 Deyonta Davis C 22 ATL 9 0 13.1 1.7 2.4 ... 0.600 1.1 2.9 4.0 0.6 0.3 0.6 0.3 1.3 4.0
163 128 Ed Davis C 29 BRK 81 1 17.9 2.3 3.7 ... 0.617 2.7 5.9 8.6 0.8 0.4 0.4 0.8 2.8 5.8
164 129 Tyler Davis C 21 OKC 1 0 1.0 0.0 1.0 ... 0.000 1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0
165 130 Dewayne Dedmon C 29 ATL 64 52 25.1 4.0 8.2 ... 0.814 1.6 5.9 7.5 1.4 1.1 1.1 1.3 3.3 10.8
166 131 Sam Dekker PF 24 TOT 47 5 16.8 2.6 5.4 ... 0.609 1.1 2.0 3.1 1.0 0.8 0.1 0.5 1.0 6.1
167 131 Sam Dekker PF 24 CLE 9 5 18.8 2.4 5.3 ... 0.800 1.0 2.7 3.7 1.0 1.2 0.0 0.6 1.4 6.3
168 131 Sam Dekker PF 24 WAS 38 0 16.3 2.6 5.5 ... 0.556 1.2 1.9 3.0 1.0 0.7 0.2 0.5 0.9 6.1
169 132 Ángel Delgado C 24 LAC 2 0 7.5 0.5 2.5 ... 0.500 1.0 1.0 2.0 0.0 0.5 0.0 0.0 1.0 1.5
170 133 Matthew Dellavedova PG 28 TOT 48 0 16.9 2.0 5.0 ... 0.808 0.1 1.5 1.6 3.8 0.3 0.0 1.4 1.6 5.9
171 133 Matthew Dellavedova PG 28 MIL 12 0 8.1 0.5 1.6 ... 1.000 0.0 0.8 0.8 2.4 0.2 0.0 0.9 0.8 1.7
172 133 Matthew Dellavedova PG 28 CLE 36 0 19.9 2.6 6.2 ... 0.792 0.2 1.7 1.9 4.2 0.3 0.1 1.6 1.8 7.3
173 134 Luol Deng SF 33 MIN 22 2 17.8 2.7 5.4 ... 0.714 0.9 2.4 3.3 0.8 0.7 0.4 0.6 1.1 7.1
174 135 DeMar DeRozan SG 29 SAS 77 77 34.9 8.2 17.1 ... 0.830 0.7 5.3 6.0 6.2 1.1 0.5 2.6 2.3 21.2
175 136 Marcus Derrickson PF 22 GSW 11 0 6.1 1.5 3.0 ... 0.800 0.7 0.5 1.2 0.1 0.0 0.1 0.3 0.8 4.2
176 137 Cheick Diallo PF 22 NOP 64 1 14.0 2.6 4.2 ... 0.746 1.2 4.0 5.2 0.5 0.5 0.5 0.8 1.8 6.0
177 138 Hamidou Diallo SG 20 OKC 51 3 10.3 1.5 3.2 ... 0.610 0.7 1.2 1.9 0.3 0.4 0.2 0.5 1.5 3.7
178 139 Gorgui Dieng C 29 MIN 76 2 13.6 2.5 5.0 ... 0.830 1.1 3.0 4.1 0.9 0.6 0.5 0.8 1.8 6.4
179 140 Spencer Dinwiddie PG 25 BRK 68 4 28.1 5.4 12.2 ... 0.806 0.4 2.1 2.4 4.6 0.6 0.3 2.2 2.8 16.8
180 141 Donte DiVincenzo SG 22 MIL 27 0 15.2 1.9 4.6 ... 0.750 0.6 1.8 2.4 1.1 0.5 0.2 0.7 1.4 4.9
181 142 Luka Dončić SG 19 DAL 72 72 32.2 7.0 16.5 ... 0.713 1.2 6.6 7.8 6.0 1.1 0.3 3.4 1.9 21.2
182 143 Tyler Dorsey SG 22 TOT 48 11 14.5 2.2 5.5 ... 0.623 0.6 1.8 2.4 1.2 0.3 0.0 0.6 1.1 6.2
183 143 Tyler Dorsey SG 22 ATL 27 0 9.3 1.2 3.3 ... 0.615 0.3 1.3 1.6 0.6 0.3 0.0 0.4 0.7 3.3
184 143 Tyler Dorsey SG 22 MEM 21 11 21.3 3.6 8.3 ... 0.629 0.9 2.5 3.3 1.9 0.3 0.0 0.8 1.6 9.8
185 144 Damyean Dotson SG 24 NYK 73 40 27.5 4.0 9.6 ... 0.745 0.5 3.1 3.6 1.8 0.8 0.1 1.0 1.8 10.7
186 145 PJ Dozier SG 22 BOS 6 0 8.5 1.3 3.5 ... 0.500 1.0 1.8 2.8 0.8 0.3 0.0 0.0 0.3 3.2
187 146 Goran Dragić PG 32 MIA 36 22 27.5 5.0 12.0 ... 0.782 0.6 2.5 3.1 4.8 0.8 0.1 2.0 2.3 13.7
188 147 Andre Drummond C 25 DET 79 79 33.5 7.1 13.3 ... 0.590 5.4 10.2 15.6 1.4 1.7 1.7 2.2 3.4 17.3
189 148 Jared Dudley PF 33 BRK 59 25 20.7 1.7 4.1 ... 0.696 0.6 2.1 2.6 1.4 0.6 0.3 0.7 2.2 4.9
190 149 Kris Dunn PG 24 CHI 46 44 30.2 4.7 11.0 ... 0.797 0.4 3.7 4.1 6.0 1.5 0.5 2.3 3.6 11.3
191 150 Kevin Durant SF 30 GSW 78 78 34.6 9.2 17.7 ... 0.885 0.4 5.9 6.4 5.9 0.7 1.1 2.9 2.0 26.0
192 151 Trevon Duval PG 20 MIL 3 0 2.0 0.7 1.0 ... 0.000 0.0 0.3 0.3 0.7 0.0 0.0 0.0 0.0 1.7
193 152 Vince Edwards SF 22 HOU 2 0 8.0 0.5 2.0 ... 0.000 0.5 0.5 1.0 0.0 0.0 0.0 0.0 0.0 1.5
194 153 Henry Ellenson PF 22 TOT 19 0 13.6 2.1 5.0 ... 0.760 0.3 3.2 3.5 0.8 0.4 0.1 0.5 1.4 6.0
195 153 Henry Ellenson PF 22 DET 2 0 12.5 2.0 5.0 ... 1.000 0.0 4.5 4.5 0.5 0.0 0.0 0.0 1.0 6.0
196 153 Henry Ellenson PF 22 NYK 17 0 13.8 2.1 5.0 ... 0.739 0.3 3.1 3.4 0.9 0.4 0.1 0.5 1.5 6.0
197 154 Wayne Ellington SG 31 TOT 53 38 24.5 3.5 8.6 ... 0.796 0.3 1.8 2.0 1.4 1.0 0.1 0.8 1.7 10.3
198 154 Wayne Ellington SG 31 MIA 25 12 21.3 2.8 7.4 ... 0.875 0.2 1.6 1.9 1.2 1.0 0.1 0.6 1.6 8.4
199 154 Wayne Ellington SG 31 DET 28 26 27.3 4.1 9.8 ... 0.758 0.3 1.9 2.1 1.5 1.1 0.1 0.9 1.9 12.0
200 155 Joel Embiid C 24 PHI 64 64 33.7 9.1 18.7 ... 0.804 2.5 11.1 13.6 3.7 0.7 1.9 3.5 3.3 27.5
201 156 James Ennis III SF 28 TOT 58 27 21.2 2.4 5.1 ... 0.716 1.0 2.1 3.1 0.7 0.7 0.4 0.6 2.6 6.7
202 156 James Ennis III SF 28 HOU 40 25 23.7 2.6 5.3 ... 0.724 0.9 2.0 2.9 0.7 1.0 0.4 0.6 2.8 7.4
203 156 James Ennis III SF 28 PHI 18 2 15.6 1.9 4.6 ... 0.696 1.3 2.3 3.6 0.8 0.2 0.4 0.6 2.2 5.3
204 157 Drew Eubanks PF 21 SAS 23 0 4.9 0.7 1.1 ... 0.846 0.3 1.2 1.5 0.3 0.1 0.2 0.3 0.5 1.8
205 158 Jacob Evans SG 21 GSW 30 1 6.8 0.6 1.8 ... 0.000 0.2 0.6 0.8 0.8 0.2 0.1 0.4 0.9 1.3
206 159 Jawun Evans PG 22 TOT 8 0 8.1 0.4 1.8 ... 0.000 0.1 1.4 1.5 1.3 0.4 0.0 0.8 1.0 0.8
207 159 Jawun Evans PG 22 PHO 7 0 9.1 0.4 1.9 ... 0.000 0.1 1.6 1.7 1.4 0.4 0.0 0.9 1.1 0.9
208 159 Jawun Evans PG 22 OKC 1 0 1.0 0.0 1.0 ... 0.000 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
209 160 Tyreke Evans SG 29 IND 69 18 20.3 3.7 9.6 ... 0.719 0.5 2.4 2.9 2.4 0.8 0.3 1.7 1.7 10.2
210 161 Dante Exum PG 23 UTA 42 1 15.8 2.4 5.7 ... 0.791 0.4 1.2 1.6 2.6 0.3 0.1 1.2 1.6 6.9
211 162 Kenneth Faried C 29 TOT 37 13 19.7 4.2 7.2 ... 0.646 2.6 4.1 6.8 0.5 0.5 0.6 0.9 2.2 10.4
212 162 Kenneth Faried C 29 BRK 12 0 9.8 2.1 3.5 ... 0.625 1.3 2.4 3.7 0.2 0.2 0.3 0.5 0.7 5.1
213 162 Kenneth Faried C 29 HOU 25 13 24.4 5.2 8.9 ... 0.651 3.3 5.0 8.2 0.7 0.6 0.8 1.1 3.0 12.9
214 163 Derrick Favors C 27 UTA 76 70 23.2 4.8 8.1 ... 0.675 2.7 4.6 7.4 1.2 0.7 1.4 1.1 2.1 11.8
215 164 Cristiano Felício C 26 CHI 60 0 12.4 1.6 3.0 ... 0.685 1.3 2.3 3.6 0.6 0.2 0.1 0.6 1.2 4.0
216 165 Raymond Felton PG 34 OKC 33 0 11.5 1.7 4.1 ... 0.923 0.1 0.9 1.0 1.6 0.3 0.2 0.4 0.9 4.3
217 166 Terrance Ferguson SG 20 OKC 74 74 26.1 2.5 5.8 ... 0.725 0.4 1.5 1.9 1.0 0.5 0.2 0.6 3.1 6.9
218 167 Yogi Ferrell PG 25 SAC 71 3 15.0 2.2 5.0 ... 0.896 0.2 1.4 1.5 1.9 0.5 0.1 0.6 0.9 5.9
219 168 Dorian Finney-Smith SF 25 DAL 81 26 24.5 2.8 6.5 ... 0.709 1.7 3.1 4.8 1.2 0.9 0.4 0.9 2.3 7.5
220 169 Bryn Forbes SG 25 SAS 82 81 28.0 4.4 9.6 ... 0.885 0.2 2.7 2.9 2.1 0.5 0.0 1.0 1.9 11.8
221 170 Evan Fournier SG 26 ORL 81 81 31.5 5.8 13.2 ... 0.806 0.5 2.7 3.2 3.6 0.9 0.1 1.9 2.8 15.1
222 171 De'Aaron Fox PG 21 SAC 81 81 31.4 6.2 13.6 ... 0.727 0.5 3.2 3.8 7.3 1.6 0.6 2.8 2.5 17.3
223 172 Melvin Frazier SG 22 ORL 10 0 4.4 0.7 2.1 ... 0.250 0.3 0.2 0.5 0.1 0.1 0.0 0.1 0.6 1.5
224 173 Tim Frazier PG 28 TOT 59 19 19.0 2.0 4.4 ... 0.759 0.7 2.2 2.8 4.2 0.5 0.1 1.3 1.9 5.3
225 173 Tim Frazier PG 28 NOP 47 17 19.3 1.9 4.1 ... 0.780 0.7 2.2 2.9 4.4 0.5 0.1 1.3 2.0 5.0
226 173 Tim Frazier PG 28 MIL 12 2 17.6 2.3 5.5 ... 0.692 0.8 1.8 2.6 3.5 0.4 0.1 1.3 1.6 6.3
227 174 Jimmer Fredette SG 29 PHO 6 0 10.8 1.3 4.8 ... 1.000 0.2 1.0 1.2 1.3 0.5 0.0 0.8 0.8 3.7
228 175 Enes Freedom C 26 TOT 67 31 24.5 5.6 10.2 ... 0.787 3.8 6.0 9.8 1.7 0.5 0.4 1.8 2.5 13.7
229 175 Enes Freedom C 26 NYK 44 23 25.6 5.7 10.6 ... 0.814 3.9 6.6 10.5 1.9 0.4 0.4 1.8 2.4 14.0
230 175 Enes Freedom C 26 POR 23 8 22.3 5.4 9.3 ... 0.735 3.7 4.9 8.6 1.4 0.6 0.4 1.7 2.7 13.1
231 176 Channing Frye C 35 CLE 36 6 9.5 1.2 3.3 ... 0.786 0.1 1.3 1.4 0.6 0.2 0.1 0.4 1.2 3.6
232 177 Markelle Fultz SG 20 PHI 19 15 22.5 3.4 8.2 ... 0.568 1.4 2.3 3.7 3.1 0.9 0.3 1.3 2.7 8.2
233 178 Danilo Gallinari SF 30 LAC 68 68 30.3 6.0 13.0 ... 0.904 0.8 5.3 6.1 2.6 0.7 0.3 1.5 1.9 19.8
234 179 Langston Galloway SG 27 DET 80 4 21.8 2.9 7.3 ... 0.844 0.6 1.5 2.1 1.1 0.5 0.1 0.3 1.7 8.4
235 180 Billy Garrett SG 24 NYK 4 0 15.8 2.8 6.8 ... 1.000 0.0 0.8 0.8 1.8 0.3 0.3 0.5 0.8 6.5
236 181 Marc Gasol C 34 TOT 79 72 30.8 4.9 11.0 ... 0.759 1.0 6.9 7.9 4.4 1.1 1.1 2.0 2.7 13.6
237 181 Marc Gasol C 34 MEM 53 53 33.7 5.7 12.9 ... 0.756 1.1 7.5 8.6 4.7 1.1 1.2 2.2 2.8 15.7
238 181 Marc Gasol C 34 TOR 26 19 24.9 3.3 7.2 ... 0.769 0.9 5.7 6.6 3.9 0.9 0.9 1.4 2.7 9.1
239 182 Pau Gasol C 38 TOT 30 6 12.0 1.4 3.1 ... 0.700 0.7 3.8 4.6 1.7 0.2 0.5 0.5 1.0 3.9
240 182 Pau Gasol C 38 SAS 27 6 12.2 1.5 3.3 ... 0.711 0.8 3.9 4.7 1.9 0.2 0.5 0.5 1.0 4.2
241 182 Pau Gasol C 38 MIL 3 0 10.0 0.3 2.0 ... 0.500 0.0 3.3 3.3 0.7 0.0 0.3 0.7 0.3 1.3
242 183 Rudy Gay PF 32 SAS 69 51 26.7 5.4 10.8 ... 0.816 0.9 5.9 6.8 2.6 0.8 0.5 1.7 2.3 13.7
243 184 Paul George SF 28 OKC 77 77 36.9 9.2 21.0 ... 0.839 1.4 6.8 8.2 4.1 2.2 0.4 2.7 2.8 28.0
244 185 Taj Gibson PF 33 MIN 70 57 24.1 4.3 7.7 ... 0.757 2.5 4.1 6.5 1.2 0.8 0.6 1.0 2.7 10.8
245 186 Harry Giles PF 20 SAC 58 0 14.1 3.0 6.0 ... 0.637 1.1 2.7 3.8 1.5 0.5 0.4 1.3 2.6 7.0
246 187 Shai Gilgeous-Alexander PG 20 LAC 82 73 26.5 4.2 8.7 ... 0.800 0.7 2.1 2.8 3.3 1.2 0.5 1.7 2.1 10.8
247 188 Rudy Gobert C 26 UTA 81 80 31.8 5.9 8.8 ... 0.636 3.8 9.0 12.9 2.0 0.8 2.3 1.6 2.9 15.9
248 189 Brandon Goodwin PG 23 DEN 16 0 3.6 0.4 1.4 ... 0.818 0.1 0.1 0.2 0.9 0.0 0.0 0.2 0.4 1.4
249 190 Aaron Gordon PF 23 ORL 78 78 33.8 6.0 13.4 ... 0.731 1.7 5.7 7.4 3.7 0.7 0.7 2.1 2.2 16.0
250 191 Eric Gordon SG 30 HOU 68 53 31.7 5.6 13.8 ... 0.783 0.3 1.9 2.2 1.9 0.6 0.4 1.3 2.1 16.2
251 192 Marcin Gortat C 34 LAC 47 43 16.0 2.1 4.0 ... 0.729 1.4 4.1 5.6 1.4 0.1 0.5 1.1 2.0 5.0
252 193 Devonte' Graham PG 23 CHO 46 3 14.7 1.6 4.7 ... 0.761 0.2 1.2 1.4 2.6 0.5 0.0 0.7 1.0 4.7
253 194 Treveon Graham SG 25 BRK 35 21 20.4 1.8 5.5 ... 0.818 0.7 2.4 3.1 1.0 0.4 0.2 0.5 1.9 5.3
254 195 Jerami Grant PF 24 OKC 80 77 32.7 5.1 10.3 ... 0.710 1.2 4.0 5.2 1.0 0.8 1.3 0.8 2.7 13.6
255 196 Jerian Grant PG 26 ORL 60 1 15.7 1.5 3.7 ... 0.650 0.3 1.3 1.6 2.6 0.7 0.1 0.9 1.3 4.2
256 197 Donte Grantham SF 23 OKC 3 0 0.7 0.0 0.7 ... 0.000 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
257 198 Danny Green SG 31 TOR 80 80 27.7 3.7 7.9 ... 0.841 0.8 3.2 4.0 1.6 0.9 0.7 0.9 2.1 10.3
258 199 Draymond Green PF 28 GSW 66 66 31.3 2.8 6.4 ... 0.692 0.9 6.4 7.3 6.9 1.4 1.1 2.6 3.0 7.4
259 200 Gerald Green SG 33 HOU 73 0 20.2 3.2 7.9 ... 0.838 0.4 2.1 2.5 0.5 0.5 0.4 0.8 1.7 9.2
260 201 JaMychal Green PF 28 TOT 65 6 21.1 3.5 7.3 ... 0.792 1.6 4.7 6.3 0.8 0.7 0.5 1.3 3.0 9.4
261 201 JaMychal Green PF 28 MEM 41 4 22.0 3.7 7.6 ... 0.788 1.8 4.4 6.1 0.9 0.8 0.6 1.6 3.0 9.8
262 201 JaMychal Green PF 28 LAC 24 2 19.6 3.3 6.8 ... 0.810 1.3 5.2 6.5 0.6 0.5 0.3 1.0 2.9 8.7
263 202 Jeff Green PF 32 WAS 77 44 27.2 4.2 8.9 ... 0.888 0.7 3.3 4.0 1.8 0.6 0.5 1.3 2.1 12.3
264 203 Blake Griffin PF 29 DET 75 75 35.0 8.3 17.9 ... 0.753 1.3 6.2 7.5 5.4 0.7 0.4 3.4 2.7 24.5
265 204 Daniel Hamilton SG 23 ATL 19 3 10.7 1.2 3.2 ... 0.500 0.5 1.9 2.5 1.2 0.3 0.1 0.8 1.0 3.0
266 205 Dusty Hannahs SG 25 MEM 2 0 13.0 1.5 6.0 ... 1.000 0.0 0.5 0.5 2.5 0.5 0.0 0.5 0.5 4.0
267 206 Tim Hardaway Jr. SG 26 TOT 65 63 31.6 6.0 15.3 ... 0.841 0.5 2.9 3.4 2.4 0.8 0.1 1.6 2.2 18.1
268 206 Tim Hardaway Jr. SG 26 NYK 46 46 32.6 6.1 15.8 ... 0.854 0.6 2.9 3.5 2.7 0.9 0.1 1.8 2.3 19.1
269 206 Tim Hardaway Jr. SG 26 DAL 19 17 29.4 5.7 14.1 ... 0.767 0.4 2.8 3.2 1.9 0.6 0.1 1.3 1.8 15.5
270 207 James Harden PG 29 HOU 78 78 36.8 10.8 24.5 ... 0.879 0.8 5.8 6.6 7.5 2.0 0.7 5.0 3.1 36.1
271 208 Maurice Harkless SF 25 POR 60 53 23.6 3.2 6.5 ... 0.671 1.3 3.2 4.5 1.2 1.1 0.9 0.8 2.7 7.7
272 209 Montrezl Harrell C 25 LAC 82 5 26.3 6.7 10.8 ... 0.643 2.2 4.3 6.5 2.0 0.9 1.3 1.6 3.1 16.6
273 210 Devin Harris PG 35 DAL 68 2 15.8 1.9 5.1 ... 0.761 0.2 1.5 1.6 1.8 0.5 0.2 0.8 2.0 6.3
274 211 Gary Harris SG 24 DEN 57 48 28.8 4.7 11.2 ... 0.799 0.7 2.1 2.8 2.2 1.0 0.3 1.2 2.0 12.9
275 212 Joe Harris SG 27 BRK 76 76 30.2 4.9 9.8 ... 0.827 0.7 3.1 3.8 2.4 0.5 0.2 1.6 2.4 13.7
276 213 Tobias Harris PF 26 TOT 82 82 34.7 7.5 15.3 ... 0.866 0.8 7.0 7.9 2.8 0.6 0.5 1.8 2.2 20.0
277 213 Tobias Harris PF 26 LAC 55 55 34.6 7.7 15.5 ... 0.877 0.7 7.2 7.9 2.7 0.7 0.4 2.0 2.2 20.9
278 213 Tobias Harris PF 26 PHI 27 27 35.0 6.9 14.8 ... 0.841 1.2 6.7 7.9 2.9 0.4 0.5 1.6 2.3 18.2
279 214 Andrew Harrison PG 24 TOT 17 0 11.0 0.9 3.1 ... 0.944 0.4 0.8 1.2 1.4 0.2 0.1 0.7 2.0 3.2
280 214 Andrew Harrison PG 24 MEM 1 0 5.0 1.0 2.0 ... 0.000 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 2.0
281 214 Andrew Harrison PG 24 CLE 10 0 14.4 1.2 3.9 ... 1.000 0.4 1.1 1.5 1.7 0.4 0.2 1.0 2.6 4.3
282 214 Andrew Harrison PG 24 NOP 6 0 6.3 0.5 2.0 ... 0.500 0.3 0.5 0.8 1.2 0.0 0.0 0.3 1.2 1.5
283 215 Shaquille Harrison SG 25 CHI 73 11 19.6 2.5 5.8 ... 0.667 0.5 2.6 3.0 1.9 1.2 0.4 0.8 1.7 6.5
284 216 Josh Hart SG 23 LAL 67 22 25.6 2.8 6.9 ... 0.688 0.5 3.2 3.7 1.4 1.0 0.6 0.9 2.2 7.8
285 217 Isaiah Hartenstein PF 20 HOU 28 0 7.9 0.7 1.5 ... 0.786 0.8 0.9 1.7 0.5 0.3 0.4 0.5 2.0 1.9
286 218 Udonis Haslem C 38 MIA 10 1 7.4 1.1 3.3 ... 0.750 0.3 2.4 2.7 0.2 0.0 0.0 0.3 0.9 2.5
287 219 Gordon Hayward PF 28 BOS 72 18 25.9 4.1 8.8 ... 0.834 0.7 3.8 4.5 3.4 0.9 0.3 1.5 1.4 11.5
288 220 John Henson C 28 MIL 14 0 13.4 2.2 4.8 ... 0.600 1.1 3.9 5.1 1.0 0.5 0.8 0.9 1.1 5.6
289 221 Juancho Hernangómez PF 23 DEN 70 25 19.4 2.0 4.5 ... 0.767 0.9 2.9 3.8 0.8 0.4 0.3 0.5 1.3 5.8
290 222 Willy Hernangómez C 24 CHO 58 3 14.0 2.6 5.1 ... 0.694 2.0 3.3 5.4 1.0 0.3 0.3 1.0 1.7 7.3
291 223 Mario Hezonja SF 23 NYK 58 24 20.8 3.3 8.0 ... 0.763 0.5 3.6 4.1 1.5 1.0 0.1 1.5 1.9 8.8
292 224 Isaiah Hicks PF 24 NYK 3 0 10.7 1.3 2.7 ... 0.800 0.7 1.7 2.3 0.7 0.3 1.0 0.3 1.7 4.0
293 225 Buddy Hield SG 26 SAC 82 82 31.9 7.6 16.6 ... 0.886 1.3 3.7 5.0 2.5 0.7 0.4 1.8 2.5 20.7
294 226 Haywood Highsmith SF 22 PHI 5 0 8.0 0.8 2.0 ... 0.000 0.0 1.0 1.0 0.4 0.2 0.0 0.2 0.2 1.8
295 227 Nenê C 36 HOU 42 2 13.0 1.4 2.8 ... 0.660 0.8 2.1 2.9 0.6 0.4 0.4 0.3 2.1 3.6
296 228 George Hill PG 32 TOT 60 13 21.7 2.8 6.3 ... 0.824 0.7 1.8 2.5 2.3 0.9 0.1 0.9 1.7 7.6
297 228 George Hill PG 32 CLE 13 13 26.5 4.2 8.2 ... 0.850 0.9 1.2 2.1 2.8 0.9 0.1 1.5 2.7 10.8
298 228 George Hill PG 32 MIL 47 0 20.4 2.4 5.7 ... 0.815 0.6 2.0 2.6 2.1 0.9 0.1 0.7 1.4 6.8
299 229 Solomon Hill SF 27 NOP 44 15 20.0 1.5 4.0 ... 0.719 0.8 2.3 3.0 1.3 0.5 0.2 0.7 1.8 4.3
300 230 Aaron Holiday PG 22 IND 50 0 12.9 2.1 5.2 ... 0.820 0.1 1.2 1.3 1.7 0.4 0.3 0.8 1.4 5.9
301 231 Jrue Holiday SG 28 NOP 67 67 35.9 8.2 17.3 ... 0.768 1.1 3.9 5.0 7.7 1.6 0.8 3.1 2.2 21.2
302 232 Justin Holiday SG 29 TOT 82 77 31.8 3.7 9.5 ... 0.896 0.6 3.4 3.9 1.8 1.5 0.4 1.3 2.0 10.5
303 232 Justin Holiday SG 29 CHI 38 38 34.9 4.0 10.4 ... 0.891 0.5 3.9 4.4 2.2 1.8 0.6 1.2 2.1 11.6
304 232 Justin Holiday SG 29 MEM 44 39 29.1 3.4 8.7 ... 0.900 0.6 2.9 3.5 1.4 1.2 0.3 1.3 1.9 9.5
305 233 John Holland SF 30 CLE 1 0 1.0 0.0 0.0 ... 0.000 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
306 234 Rondae Hollis-Jefferson SF 24 BRK 59 21 20.9 3.4 8.3 ... 0.645 1.4 3.8 5.3 1.6 0.7 0.5 1.2 1.8 8.9
307 235 Richaun Holmes C 25 PHO 70 4 16.9 3.2 5.2 ... 0.731 1.6 3.1 4.7 0.9 0.6 1.1 0.7 2.8 8.2
308 236 Rodney Hood SG 26 TOT 72 49 26.3 4.1 9.3 ... 0.884 0.3 1.8 2.2 1.8 0.8 0.2 0.8 2.0 11.2
309 236 Rodney Hood SG 26 CLE 45 45 27.4 4.3 10.1 ... 0.912 0.4 2.1 2.5 2.0 0.8 0.1 0.8 2.2 12.2
310 236 Rodney Hood SG 26 POR 27 4 24.4 3.6 8.0 ... 0.805 0.3 1.4 1.7 1.3 0.8 0.3 0.7 1.7 9.6
311 237 Al Horford C 32 BOS 68 68 29.0 5.7 10.6 ... 0.821 1.8 5.0 6.7 4.2 0.9 1.3 1.5 1.9 13.6
312 238 Danuel House Jr. SF 25 HOU 39 13 25.1 3.0 6.5 ... 0.789 0.6 2.9 3.6 1.0 0.5 0.3 0.9 2.1 9.4
313 239 Dwight Howard C 33 WAS 9 9 25.6 4.8 7.7 ... 0.604 2.7 6.6 9.2 0.4 0.8 0.4 1.8 3.8 12.8
314 240 Kevin Huerter SG 20 ATL 75 59 27.3 3.7 8.8 ... 0.732 0.8 2.5 3.3 2.9 0.9 0.3 1.5 2.1 9.7
315 241 Isaac Humphries C 21 ATL 5 1 11.2 1.2 4.2 ... 0.000 0.8 1.4 2.2 0.0 0.2 0.0 0.0 1.4 3.0
316 242 R.J. Hunter SG 25 BOS 1 0 26.0 6.0 13.0 ... 0.500 1.0 2.0 3.0 3.0 1.0 0.0 0.0 3.0 17.0
317 243 Chandler Hutchison SF 22 CHI 44 14 20.3 2.2 4.8 ... 0.605 0.7 3.5 4.2 0.8 0.5 0.1 0.6 1.3 5.2
318 244 Serge Ibaka C 29 TOR 74 51 27.2 6.3 11.9 ... 0.763 2.1 6.0 8.1 1.3 0.4 1.4 1.5 2.9 15.0
319 245 Andre Iguodala SF 35 GSW 68 13 23.2 2.2 4.4 ... 0.582 0.7 3.0 3.7 3.2 0.9 0.8 0.8 1.4 5.7
320 246 Ersan İlyasova PF 31 MIL 67 7 18.4 2.5 5.7 ... 0.824 1.4 3.1 4.5 0.8 0.5 0.3 0.7 2.6 6.8
321 247 Joe Ingles PF 31 UTA 82 82 31.3 4.4 9.8 ... 0.707 0.4 3.6 4.0 5.7 1.2 0.2 2.4 2.2 12.1
322 248 Andre Ingram SG 33 LAL 4 0 3.8 0.0 1.5 ... 0.000 0.3 0.3 0.5 0.0 0.3 0.0 0.3 0.0 0.0
323 249 Brandon Ingram SF 21 LAL 52 52 33.8 7.0 14.0 ... 0.675 0.8 4.3 5.1 3.0 0.5 0.6 2.5 2.9 18.3
324 250 Kyrie Irving PG 26 BOS 67 67 33.0 9.0 18.5 ... 0.873 1.1 3.9 5.0 6.9 1.5 0.5 2.6 2.5 23.8
325 251 Jonathan Isaac PF 21 ORL 75 64 26.6 3.5 8.1 ... 0.815 1.3 4.2 5.5 1.1 0.8 1.3 1.0 1.9 9.6
326 252 Wes Iwundu SF 24 ORL 68 13 18.1 1.7 4.0 ... 0.816 0.5 2.2 2.7 1.1 0.4 0.3 0.6 1.8 5.0
327 253 Demetrius Jackson PG 24 PHI 6 0 6.5 1.3 2.5 ... 1.000 0.3 0.2 0.5 0.8 0.3 0.0 0.2 0.7 3.7
328 254 Frank Jackson PG 20 NOP 61 16 19.2 3.2 7.3 ... 0.740 0.4 1.8 2.2 1.1 0.4 0.0 0.8 1.5 8.1
329 255 Jaren Jackson Jr. PF 19 MEM 58 56 26.1 5.1 10.2 ... 0.766 1.3 3.4 4.7 1.1 0.9 1.4 1.7 3.8 13.8
330 256 Josh Jackson SG 21 PHO 79 29 25.2 4.4 10.6 ... 0.671 0.8 3.6 4.4 2.3 0.9 0.7 2.2 2.6 11.5
331 257 Justin Jackson SF 23 TOT 81 14 19.9 2.7 6.0 ... 0.785 0.5 2.1 2.6 1.2 0.4 0.2 0.4 1.2 7.2
332 257 Justin Jackson SF 23 SAC 52 3 20.8 2.4 5.7 ... 0.820 0.5 2.3 2.8 1.3 0.4 0.3 0.4 1.3 6.7
333 257 Justin Jackson SF 23 DAL 29 11 18.3 3.2 6.6 ... 0.724 0.7 1.6 2.3 1.0 0.3 0.0 0.2 1.1 8.2
334 258 Reggie Jackson PG 28 DET 82 82 27.9 5.4 12.8 ... 0.864 0.5 2.1 2.6 4.2 0.7 0.1 1.8 2.5 15.4
335 259 LeBron James SF 34 LAL 55 55 35.2 10.1 19.9 ... 0.665 1.0 7.4 8.5 8.3 1.3 0.6 3.6 1.7 27.4
336 260 Amile Jefferson PF 25 ORL 12 0 5.7 0.8 1.3 ... 0.875 0.5 1.3 1.8 0.3 0.3 0.3 0.1 0.7 2.3
337 261 John Jenkins SG 27 TOT 26 0 12.8 1.6 4.0 ... 0.833 0.2 1.2 1.4 0.8 0.0 0.1 0.3 0.4 4.7
338 261 John Jenkins SG 27 WAS 4 0 3.5 0.5 0.5 ... 0.000 0.0 0.3 0.3 0.3 0.0 0.0 0.0 0.0 1.5
339 261 John Jenkins SG 27 NYK 22 0 14.5 1.8 4.7 ... 0.833 0.3 1.4 1.6 1.0 0.0 0.1 0.4 0.5 5.2
340 262 Jonas Jerebko PF 31 GSW 73 6 16.7 2.2 4.9 ... 0.800 1.0 3.0 3.9 1.3 0.4 0.2 0.6 1.9 6.3
341 263 Alize Johnson PF 22 IND 14 0 4.6 0.3 1.1 ... 0.500 0.3 1.1 1.4 0.1 0.1 0.2 0.0 0.5 0.9
342 264 Amir Johnson C 31 PHI 51 6 10.4 1.5 3.1 ... 0.756 0.9 2.0 2.9 1.2 0.3 0.3 0.9 1.9 3.9
343 265 B.J. Johnson SF 23 TOT 7 0 7.0 1.3 2.6 ... 1.000 0.3 0.9 1.1 0.0 0.3 0.0 0.3 0.6 3.3
344 265 B.J. Johnson SF 23 ATL 6 0 7.2 1.3 2.7 ... 1.000 0.3 1.0 1.3 0.0 0.3 0.0 0.3 0.5 3.5
345 265 B.J. Johnson SF 23 SAC 1 0 6.0 1.0 2.0 ... 0.000 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 2.0
346 266 James Johnson PF 31 MIA 55 33 21.2 3.0 6.9 ... 0.714 0.4 2.8 3.2 2.5 0.6 0.5 1.3 2.1 7.8
347 267 Stanley Johnson SF 22 TOT 66 7 18.3 2.6 6.7 ... 0.781 0.5 2.8 3.3 1.3 0.9 0.2 1.2 1.7 6.9
348 267 Stanley Johnson SF 22 DET 48 7 20.0 2.8 7.3 ... 0.804 0.5 3.1 3.6 1.3 1.0 0.3 1.1 1.9 7.5
349 267 Stanley Johnson SF 22 NOP 18 0 13.7 2.1 5.1 ... 0.692 0.5 1.8 2.3 1.6 0.7 0.1 1.4 1.2 5.3
350 268 Tyler Johnson PG 26 TOT 57 22 26.8 3.8 9.2 ... 0.748 0.6 2.4 3.0 2.9 0.9 0.5 1.4 1.7 10.9
351 268 Tyler Johnson PG 26 MIA 44 10 25.5 3.9 9.1 ... 0.693 0.4 2.3 2.8 2.5 0.9 0.5 1.4 1.6 10.8
352 268 Tyler Johnson PG 26 PHO 13 12 31.2 3.5 9.6 ... 0.872 1.2 2.8 4.0 4.2 1.1 0.5 1.1 1.9 11.1
353 269 Wesley Johnson SF 31 TOT 38 13 14.1 1.2 3.4 ... 0.684 0.3 1.6 1.9 0.6 0.4 0.3 0.5 1.7 3.4
354 269 Wesley Johnson SF 31 NOP 26 13 14.5 1.3 3.4 ... 0.667 0.4 1.7 2.1 0.6 0.5 0.3 0.5 1.7 3.7
355 269 Wesley Johnson SF 31 WAS 12 0 13.1 0.8 3.3 ... 0.700 0.2 1.3 1.5 0.6 0.2 0.4 0.5 1.5 2.8
356 270 Nikola Jokić C 23 DEN 80 80 31.3 7.7 15.1 ... 0.821 2.9 8.0 10.8 7.3 1.4 0.7 3.1 2.9 20.1
357 271 Damian Jones C 23 GSW 24 22 17.1 2.2 3.1 ... 0.649 1.3 1.8 3.1 1.2 0.5 1.0 0.7 2.6 5.4
358 272 Derrick Jones Jr. SF 21 MIA 60 14 19.2 2.7 5.4 ... 0.607 1.6 2.4 4.0 0.6 0.8 0.7 0.7 2.1 7.0
359 273 Jalen Jones SF 25 CLE 16 0 13.4 1.6 3.9 ... 0.704 0.7 1.4 2.1 0.4 0.6 0.1 0.5 1.7 5.1
360 274 Jemerrio Jones SF 23 LAL 6 2 23.8 2.0 5.5 ... 0.500 2.7 5.5 8.2 2.2 1.2 0.8 0.8 1.7 4.5
361 275 Terrence Jones PF 27 HOU 2 0 2.5 0.5 2.0 ... 0.000 0.0 2.0 2.0 0.0 0.0 0.0 0.5 0.5 1.0
362 276 Tyus Jones PG 22 MIN 68 23 22.9 2.7 6.6 ... 0.841 0.3 1.6 2.0 4.8 1.2 0.1 0.7 1.1 6.9
363 277 DeAndre Jordan C 30 TOT 69 69 29.7 4.1 6.5 ... 0.705 3.3 9.8 13.1 2.3 0.6 1.1 2.2 2.4 11.0
364 277 DeAndre Jordan C 30 DAL 50 50 31.1 4.2 6.5 ... 0.682 3.2 10.5 13.7 2.0 0.7 1.1 2.2 2.5 11.0
365 277 DeAndre Jordan C 30 NYK 19 19 25.9 4.1 6.5 ... 0.773 3.4 8.0 11.4 3.0 0.5 1.1 2.2 2.2 10.9
366 278 Cory Joseph PG 27 IND 82 9 25.2 2.8 6.7 ... 0.698 0.5 2.9 3.4 3.9 1.1 0.3 1.0 1.6 6.5
367 279 Frank Kaminsky C 25 CHO 47 0 16.1 2.9 6.3 ... 0.738 0.8 2.6 3.5 1.3 0.3 0.3 0.9 1.4 8.6
368 280 Luke Kennard SG 22 DET 63 10 22.8 3.6 8.3 ... 0.836 0.2 2.7 2.9 1.8 0.4 0.2 0.9 1.5 9.7
369 281 Michael Kidd-Gilchrist PF 25 CHO 64 3 18.4 2.5 5.2 ... 0.772 1.4 2.5 3.8 1.0 0.5 0.6 0.7 2.4 6.7
370 282 George King SF 25 PHO 1 0 6.0 0.0 0.0 ... 0.000 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0
371 283 Maxi Kleber PF 27 DAL 71 18 21.2 2.5 5.4 ... 0.784 1.3 3.4 4.6 1.0 0.5 1.1 0.8 2.0 6.8
372 284 Brandon Knight PG 27 TOT 39 26 18.9 2.5 6.7 ... 0.794 0.3 1.3 1.5 1.8 0.5 0.1 0.8 1.6 6.8
373 284 Brandon Knight PG 27 HOU 12 0 9.8 0.9 3.9 ... 0.818 0.1 0.7 0.8 0.8 0.2 0.0 0.4 1.2 3.0
374 284 Brandon Knight PG 27 CLE 27 26 22.9 3.3 7.9 ... 0.783 0.3 1.5 1.9 2.3 0.7 0.1 0.9 1.8 8.5
375 285 Kevin Knox PF 19 NYK 75 57 28.8 4.5 12.2 ... 0.717 0.8 3.7 4.5 1.1 0.6 0.3 1.5 2.3 12.8
376 286 Furkan Korkmaz SG 21 PHI 48 7 14.1 2.0 5.1 ... 0.818 0.3 1.9 2.2 1.1 0.6 0.0 0.5 1.3 5.8
377 287 Luke Kornet PF 23 NYK 46 18 17.0 2.3 6.2 ... 0.826 0.6 2.3 2.9 1.2 0.6 0.9 0.5 0.9 7.0
378 288 Kyle Korver SG-PF 37 TOT 70 0 19.1 2.9 6.9 ... 0.822 0.1 2.2 2.3 1.2 0.4 0.2 0.8 1.5 8.6
379 288 Kyle Korver PF 37 CLE 16 0 15.7 2.2 4.8 ... 0.813 0.0 1.8 1.8 1.1 0.2 0.1 1.1 1.4 6.8
380 288 Kyle Korver SG 37 UTA 54 0 20.1 3.1 7.5 ... 0.825 0.2 2.3 2.5 1.2 0.4 0.2 0.8 1.6 9.1
381 289 Kosta Koufos C 29 SAC 42 1 12.0 1.7 3.6 ... 0.417 1.2 3.0 4.2 0.9 0.4 0.4 0.6 1.6 3.7
382 290 Rodions Kurucs SF 20 BRK 63 46 20.5 3.2 7.1 ... 0.783 0.9 3.0 3.9 0.8 0.7 0.4 1.2 2.3 8.5
383 291 Kyle Kuzma PF 23 LAL 70 68 33.1 7.1 15.5 ... 0.752 0.9 4.6 5.5 2.5 0.6 0.4 1.9 2.4 18.7
384 292 Skal Labissière PF 22 TOT 22 1 8.0 1.2 2.2 ... 0.529 0.4 1.5 2.0 0.5 0.2 0.3 0.5 1.3 3.0
385 292 Skal Labissière PF 22 SAC 13 0 8.7 1.0 2.3 ... 0.545 0.3 1.5 1.8 0.5 0.2 0.2 0.5 1.6 2.8
386 292 Skal Labissière PF 22 POR 9 1 7.0 1.4 2.1 ... 0.500 0.6 1.6 2.1 0.6 0.3 0.3 0.4 0.9 3.4
387 293 Jeremy Lamb SG 26 CHO 79 55 28.5 5.5 12.4 ... 0.888 0.8 4.7 5.5 2.2 1.1 0.4 1.0 1.8 15.3
388 294 Zach LaVine SG 23 CHI 63 62 34.5 8.4 18.0 ... 0.832 0.6 4.0 4.7 4.5 1.0 0.4 3.4 2.2 23.7
389 295 Jake Layman SF 24 POR 71 33 18.7 3.0 6.0 ... 0.704 0.8 2.3 3.1 0.7 0.4 0.4 0.6 1.6 7.6
390 296 T.J. Leaf PF 21 IND 58 1 9.0 1.7 3.2 ... 0.613 0.7 1.4 2.2 0.4 0.2 0.3 0.2 0.6 3.9
391 297 Courtney Lee SG 33 TOT 34 6 12.6 1.6 3.8 ... 0.667 0.3 1.3 1.6 1.1 0.6 0.1 0.4 0.9 4.0
392 297 Courtney Lee SG 33 NYK 12 2 13.3 1.8 3.9 ... 0.643 0.5 1.8 2.3 1.3 0.7 0.2 0.4 1.1 4.7
393 297 Courtney Lee SG 33 DAL 22 4 12.2 1.5 3.7 ... 0.714 0.1 1.1 1.2 1.0 0.6 0.0 0.4 0.9 3.6
394 298 Damion Lee SG 26 GSW 32 0 11.7 1.8 4.0 ... 0.864 0.3 1.8 2.0 0.4 0.4 0.0 0.3 0.9 4.9
395 299 Walt Lemon Jr. PG 26 CHI 6 3 27.8 6.3 14.5 ... 0.727 0.7 3.8 4.5 5.0 1.8 0.2 1.7 2.3 14.3
396 300 Alex Len C 25 ATL 77 31 20.1 4.2 8.4 ... 0.648 2.1 3.5 5.5 1.1 0.4 0.9 1.3 2.6 11.1
397 301 Kawhi Leonard SF 27 TOR 60 60 34.0 9.3 18.8 ... 0.854 1.3 6.0 7.3 3.3 1.8 0.4 2.0 1.5 26.6
398 302 Meyers Leonard C 26 POR 61 2 14.4 2.2 4.0 ... 0.843 0.8 3.0 3.8 1.2 0.2 0.1 0.7 1.7 5.9
399 303 Jon Leuer PF 29 DET 41 1 9.8 1.6 2.8 ... 0.742 0.7 1.7 2.4 0.3 0.3 0.1 0.6 1.5 3.8
400 304 Caris LeVert SF 24 BRK 40 25 26.6 5.2 12.1 ... 0.691 0.9 2.9 3.8 3.9 1.1 0.4 1.7 1.9 13.7
401 305 Damian Lillard PG 28 POR 80 80 35.5 8.5 19.2 ... 0.912 0.9 3.8 4.6 6.9 1.1 0.4 2.7 1.9 25.8
402 306 Jeremy Lin PG 30 TOT 74 4 19.4 3.2 7.3 ... 0.838 0.3 2.1 2.4 3.1 0.6 0.2 1.7 1.9 9.6
403 306 Jeremy Lin PG 30 ATL 51 1 19.7 3.5 7.6 ... 0.845 0.3 2.0 2.3 3.5 0.7 0.1 1.9 1.9 10.7
404 306 Jeremy Lin PG 30 TOR 23 3 18.8 2.5 6.7 ... 0.810 0.3 2.3 2.6 2.2 0.4 0.3 1.1 2.1 7.0
405 307 Shaun Livingston PG 33 GSW 64 0 15.1 1.7 3.3 ... 0.784 0.7 1.2 1.8 1.8 0.5 0.4 0.6 1.2 4.0
406 308 Zach Lofton SG 26 DET 1 0 4.0 0.0 1.0 ... 0.000 0.0 0.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0
407 309 Kevon Looney C 22 GSW 80 24 18.5 2.7 4.3 ... 0.619 2.4 2.8 5.2 1.5 0.6 0.7 0.6 2.6 6.3
408 310 Brook Lopez C 30 MIL 81 81 28.7 4.4 9.7 ... 0.842 0.4 4.5 4.9 1.2 0.6 2.2 1.0 2.3 12.5
409 311 Robin Lopez C 30 CHI 74 36 21.7 4.1 7.2 ... 0.724 1.9 2.0 3.9 1.2 0.1 1.1 1.3 1.7 9.5
410 312 Kevin Love PF 30 CLE 22 21 27.2 5.0 12.9 ... 0.904 1.5 9.4 10.9 2.2 0.3 0.2 1.9 2.5 17.0
411 313 Kyle Lowry PG 32 TOR 65 65 34.0 4.7 11.4 ... 0.830 0.6 4.2 4.8 8.7 1.4 0.5 2.8 2.6 14.2
412 314 Jordan Loyd PG 25 TOR 12 0 4.6 0.7 1.5 ... 0.818 0.1 0.7 0.8 0.5 0.0 0.0 0.2 0.4 2.4
413 315 Kalin Lucas PG 29 DET 1 0 6.0 0.0 1.0 ... 1.000 0.0 3.0 3.0 1.0 0.0 0.0 0.0 1.0 2.0
414 316 Timothé Luwawu-Cabarrot SF 23 TOT 50 7 13.4 1.6 4.4 ... 0.756 0.2 1.7 1.9 0.5 0.4 0.2 0.4 1.5 4.6
415 316 Timothé Luwawu-Cabarrot SF 23 OKC 21 1 5.9 0.6 2.0 ... 0.667 0.2 0.7 0.9 0.2 0.2 0.0 0.2 0.7 1.7
416 316 Timothé Luwawu-Cabarrot SF 23 CHI 29 6 18.8 2.4 6.0 ... 0.771 0.2 2.5 2.7 0.8 0.5 0.2 0.6 2.0 6.8
417 317 Tyler Lydon PF 22 DEN 25 0 3.8 0.4 0.7 ... 0.333 0.3 0.4 0.7 0.2 0.1 0.0 0.2 0.4 0.9
418 318 Trey Lyles PF 23 DEN 64 2 17.5 3.2 7.7 ... 0.698 0.7 3.2 3.8 1.4 0.5 0.4 1.1 1.5 8.5
419 319 Scott Machado PG 28 LAL 4 0 4.8 1.0 1.5 ... 1.000 0.0 0.0 0.0 0.8 0.3 0.0 0.0 0.5 2.5
420 320 Shelvin Mack PG 28 TOT 57 3 21.9 2.9 7.1 ... 0.690 0.3 1.5 1.8 3.2 0.8 0.1 1.2 1.5 7.5
421 320 Shelvin Mack PG 28 MEM 53 3 22.7 3.0 7.3 ... 0.707 0.3 1.6 1.9 3.4 0.8 0.1 1.2 1.5 7.9
422 320 Shelvin Mack PG 28 CHO 4 0 10.5 0.5 3.5 ... 0.556 0.0 0.5 0.5 0.3 0.5 0.0 1.0 0.8 2.3
423 321 Daryl Macon SG 23 DAL 8 0 11.3 1.3 3.4 ... 0.571 0.3 1.3 1.5 0.9 0.1 0.0 0.8 1.0 3.6
424 322 J.P. Macura SG 23 CHO 2 0 8.5 1.5 4.5 ... 0.000 0.0 1.5 1.5 1.0 0.0 0.0 0.0 0.0 3.0
425 323 Ian Mahinmi C 32 WAS 34 6 14.6 1.4 3.1 ... 0.689 1.4 2.4 3.8 0.7 0.7 0.5 0.6 2.5 4.1
426 324 Thon Maker C-PF 21 TOT 64 5 15.2 1.7 4.2 ... 0.667 0.6 2.5 3.2 0.7 0.3 0.8 0.5 1.6 5.0
427 324 Thon Maker C 21 MIL 35 0 11.7 1.7 3.8 ... 0.541 0.5 2.3 2.7 0.5 0.3 0.5 0.3 1.6 4.7
428 324 Thon Maker PF 21 DET 29 5 19.4 1.7 4.6 ... 0.766 0.8 2.8 3.7 0.9 0.4 1.1 0.8 1.7 5.5
429 325 Boban Marjanović C 30 TOT 58 12 11.7 2.8 4.5 ... 0.748 1.5 3.1 4.6 0.9 0.3 0.5 1.0 1.6 7.3
430 325 Boban Marjanović C 30 LAC 36 9 10.4 2.4 3.9 ... 0.758 1.5 2.7 4.2 0.6 0.3 0.5 1.0 1.6 6.7
431 325 Boban Marjanović C 30 PHI 22 3 13.9 3.4 5.5 ... 0.722 1.5 3.7 5.1 1.5 0.2 0.5 1.0 1.5 8.2
432 326 Lauri Markkanen PF 21 CHI 52 51 32.3 6.6 15.3 ... 0.872 1.4 7.6 9.0 1.4 0.7 0.6 1.6 2.3 18.7
433 327 Jarell Martin PF 24 ORL 42 1 7.8 1.0 2.5 ... 0.818 0.3 1.5 1.7 0.4 0.1 0.2 0.3 1.2 2.7
434 328 Frank Mason III PG 24 SAC 38 0 11.4 1.9 4.4 ... 0.684 0.2 1.0 1.1 2.2 0.4 0.1 0.9 0.9 5.1
435 329 Yante Maten PF 22 MIA 2 0 6.5 0.5 2.0 ... 0.000 0.5 1.0 1.5 0.0 0.5 0.0 0.0 0.0 1.0
436 330 Wesley Matthews SF-SG 32 TOT 69 68 30.3 4.0 10.1 ... 0.810 0.5 2.0 2.5 2.3 0.8 0.2 1.3 2.3 12.2
437 330 Wesley Matthews SF 32 DAL 44 44 29.8 4.4 10.7 ... 0.791 0.5 1.9 2.3 2.3 0.8 0.3 1.3 2.3 13.1
438 330 Wesley Matthews SG 32 NYK 2 1 27.0 2.0 9.5 ... 0.800 0.5 1.0 1.5 2.5 0.5 0.5 1.0 1.0 7.0
439 330 Wesley Matthews SG 32 IND 23 23 31.5 3.5 9.1 ... 0.854 0.5 2.3 2.8 2.4 0.9 0.2 1.3 2.4 10.9
440 331 Luc Mbah a Moute PF 32 LAC 4 0 15.3 2.0 4.5 ... 0.400 0.5 1.3 1.8 0.5 0.3 0.3 0.5 2.0 5.0
441 332 Tahjere McCall SG 24 BRK 1 0 8.0 2.0 3.0 ... 0.000 0.0 1.0 1.0 0.0 0.0 0.0 0.0 2.0 4.0
442 333 Patrick McCaw SG 23 TOT 29 1 13.7 0.9 2.2 ... 0.867 0.2 1.4 1.7 1.0 0.8 0.1 0.6 1.3 2.6
443 333 Patrick McCaw SG 23 CLE 3 0 17.7 0.7 3.0 ... 0.000 0.0 1.0 1.0 0.7 0.7 0.0 1.0 0.3 1.7
444 333 Patrick McCaw SG 23 TOR 26 1 13.2 0.9 2.1 ... 0.867 0.3 1.5 1.7 1.0 0.8 0.1 0.5 1.4 2.7
445 334 CJ McCollum SG 27 POR 70 70 33.9 8.2 17.8 ... 0.828 0.9 3.1 4.0 3.0 0.8 0.4 1.5 2.5 21.0
446 335 T.J. McConnell PG 26 PHI 76 3 19.3 2.9 5.5 ... 0.784 0.4 1.9 2.3 3.4 1.0 0.2 1.2 1.4 6.4
447 336 Doug McDermott SF 27 IND 77 1 17.4 2.7 5.5 ... 0.835 0.2 1.2 1.4 0.9 0.2 0.1 0.5 1.4 7.3
448 337 JaVale McGee C 31 LAL 75 62 22.3 5.3 8.5 ... 0.632 2.6 4.9 7.5 0.7 0.6 2.0 1.4 2.8 12.0
449 338 Rodney McGruder SG 27 MIA 66 45 23.5 2.8 7.0 ... 0.722 0.9 2.7 3.6 1.7 0.5 0.2 1.0 1.7 7.6
450 339 Alfonzo McKinnie SF 26 GSW 72 5 13.9 1.9 3.8 ... 0.563 1.1 2.3 3.4 0.4 0.3 0.2 0.4 1.9 4.7
451 340 Ben McLemore SG 25 SAC 19 0 8.3 1.3 3.4 ... 0.667 0.2 0.7 0.9 0.2 0.3 0.2 0.3 1.2 3.9
452 341 Jordan McRae SG 27 WAS 27 0 12.3 2.3 4.8 ... 0.800 0.2 1.3 1.5 1.1 0.5 0.3 0.6 1.0 5.9
453 342 Jodie Meeks SG 31 TOR 8 0 13.0 2.6 4.9 ... 1.000 0.1 1.4 1.5 1.0 0.1 0.1 0.3 0.6 6.4
454 343 Salah Mejri C 32 DAL 36 4 11.1 1.5 3.1 ... 0.625 1.0 2.6 3.6 1.0 0.3 0.7 0.6 1.5 3.9
455 344 De'Anthony Melton PG 20 PHO 50 31 19.7 2.0 5.1 ... 0.750 0.5 2.2 2.7 3.2 1.4 0.5 1.5 2.3 5.0
456 345 Chimezie Metu PF 21 SAS 29 0 5.0 0.7 2.0 ... 0.765 0.3 0.9 1.2 0.4 0.2 0.1 0.5 0.5 1.8
457 346 Khris Middleton SF 27 MIL 77 77 31.1 6.6 14.9 ... 0.837 0.6 5.3 6.0 4.3 1.0 0.1 2.3 2.2 18.3
458 347 C.J. Miles SF 31 TOT 53 1 16.2 2.1 5.9 ... 0.828 0.2 1.5 1.8 0.7 0.5 0.3 0.6 1.5 6.4
459 347 C.J. Miles SF 31 TOR 40 1 14.1 1.8 5.2 ... 0.795 0.3 1.4 1.7 0.6 0.5 0.3 0.5 1.6 5.5
460 347 C.J. Miles SF 31 MEM 13 0 22.6 3.2 8.1 ... 0.929 0.1 2.0 2.1 1.1 0.6 0.4 0.7 1.3 9.3
461 348 Darius Miller SF 28 NOP 69 15 25.5 2.7 7.0 ... 0.789 0.2 1.7 1.9 2.1 0.6 0.3 0.9 2.4 8.2
462 349 Malcolm Miller SF 25 TOR 10 0 6.7 1.1 2.6 ... 0.750 0.1 0.4 0.5 0.1 0.1 0.1 0.1 0.5 3.5
463 350 Patty Mills PG 30 SAS 82 1 23.3 3.4 8.1 ... 0.854 0.3 1.9 2.2 3.0 0.6 0.1 1.1 1.6 9.9
464 351 Paul Millsap PF 33 DEN 70 65 27.1 4.6 9.5 ... 0.727 2.2 5.0 7.2 2.0 1.2 0.8 1.4 2.6 12.6
465 352 Shake Milton SG 22 PHI 20 0 13.4 1.7 4.4 ... 0.714 0.5 1.3 1.8 0.9 0.4 0.4 0.3 1.5 4.4
466 353 Nikola Mirotić PF 27 TOT 46 25 27.1 5.2 11.8 ... 0.847 1.3 6.1 7.4 1.2 0.7 0.7 1.0 2.3 15.2
467 353 Nikola Mirotić PF 27 NOP 32 22 28.9 5.7 12.7 ... 0.842 1.4 6.8 8.3 1.1 0.7 0.8 1.2 2.7 16.7
468 353 Nikola Mirotić PF 27 MIL 14 3 22.9 4.0 9.6 ... 0.870 1.0 4.4 5.4 1.4 0.7 0.6 0.8 1.5 11.6
469 354 Donovan Mitchell SG 22 UTA 77 77 33.7 8.6 19.9 ... 0.806 0.8 3.3 4.1 4.2 1.4 0.4 2.8 2.7 23.8
470 355 Naz Mitrou-Long SG 25 UTA 14 0 6.0 0.4 1.4 ... 1.000 0.1 0.4 0.4 1.1 0.1 0.1 0.6 0.7 1.1
471 356 Malik Monk SG 20 CHO 73 0 17.2 3.1 8.0 ... 0.882 0.2 1.7 1.9 1.6 0.5 0.3 1.2 1.5 8.9
472 357 Greg Monroe C 28 TOT 43 2 11.2 2.1 4.4 ... 0.625 1.6 2.4 4.0 0.6 0.3 0.2 0.7 1.5 5.3
473 357 Greg Monroe C 28 TOR 38 2 11.1 1.9 4.2 ... 0.574 1.6 2.5 4.1 0.4 0.3 0.2 0.8 1.6 4.8
474 357 Greg Monroe C 28 BOS 2 0 2.5 1.5 2.5 ... 0.000 1.5 0.0 1.5 0.5 0.0 0.0 0.0 0.0 3.0
475 357 Greg Monroe C 28 PHI 3 0 17.3 5.0 7.7 ... 0.909 1.3 3.0 4.3 2.3 0.3 0.0 0.3 1.7 13.7
476 358 E'Twaun Moore SG 29 NOP 53 36 27.6 4.8 10.0 ... 0.763 0.7 1.7 2.4 1.9 0.8 0.2 1.1 2.1 11.9
477 359 Eric Moreland PF 27 TOT 5 0 8.6 0.6 1.4 ... 0.000 0.8 3.2 4.0 0.8 0.2 0.2 1.0 1.8 1.4
478 359 Eric Moreland PF 27 PHO 1 0 5.0 0.0 0.0 ... 0.000 0.0 3.0 3.0 0.0 0.0 0.0 0.0 1.0 0.0
479 359 Eric Moreland PF 27 TOR 4 0 9.5 0.8 1.8 ... 0.000 1.0 3.3 4.3 1.0 0.3 0.3 1.3 2.0 1.8
480 360 Jaylen Morris SG 23 MIL 4 0 7.3 1.0 2.5 ... 0.500 0.0 1.3 1.3 1.0 0.5 0.0 0.3 0.3 2.5
481 361 Marcus Morris PF 29 BOS 75 53 27.9 5.0 11.3 ... 0.844 1.0 5.1 6.1 1.5 0.6 0.3 1.2 2.4 13.9
482 362 Markieff Morris PF 29 TOT 58 16 21.9 3.5 8.3 ... 0.772 1.1 3.5 4.6 1.4 0.6 0.4 0.9 3.0 9.4
483 362 Markieff Morris PF 29 WAS 34 15 26.0 4.2 9.6 ... 0.781 1.2 3.9 5.1 1.8 0.7 0.6 1.4 3.4 11.5
484 362 Markieff Morris PF 29 OKC 24 1 16.1 2.5 6.5 ... 0.737 0.8 3.0 3.8 0.8 0.5 0.1 0.3 2.4 6.5
485 363 Monte Morris PG 23 DEN 82 6 24.0 4.2 8.6 ... 0.802 0.4 1.9 2.4 3.6 0.9 0.0 0.6 1.2 10.4
486 364 Donatas Motiejūnas PF 28 SAS 3 0 4.3 1.0 2.0 ... 0.000 0.7 0.3 1.0 0.3 0.0 0.3 1.0 2.0 2.0
487 365 Johnathan Motley PF 23 LAC 22 0 7.1 1.8 3.3 ... 0.600 0.8 1.5 2.3 0.5 0.2 0.1 0.7 1.2 4.6
488 366 Emmanuel Mudiay PG 22 NYK 59 42 27.2 5.6 12.5 ... 0.774 0.6 2.8 3.3 3.9 0.7 0.3 2.4 1.7 14.8
489 367 Jamal Murray PG 21 DEN 75 74 32.6 6.8 15.6 ... 0.848 0.9 3.4 4.2 4.8 0.9 0.4 2.1 2.0 18.2
490 368 Džanan Musa SG 19 BRK 9 0 4.3 1.0 2.4 ... 0.000 0.1 0.4 0.6 0.2 0.2 0.0 0.4 0.1 2.1
491 369 Mike Muscala PF 27 TOT 64 10 20.4 2.3 5.6 ... 0.824 0.9 2.9 3.8 1.2 0.3 0.6 0.8 2.0 7.0
492 369 Mike Muscala PF 27 PHI 47 6 22.1 2.3 5.9 ... 0.818 1.1 3.2 4.3 1.3 0.4 0.6 0.9 2.4 7.4
493 369 Mike Muscala PF 27 LAL 17 4 15.6 2.1 4.9 ... 0.875 0.4 2.2 2.6 0.8 0.2 0.6 0.3 1.1 5.9
494 370 Svi Mykhailiuk SF 21 TOT 42 0 10.5 1.1 3.3 ... 0.600 0.2 0.6 0.9 0.9 0.3 0.0 0.5 0.6 3.2
495 370 Svi Mykhailiuk SF 21 LAL 39 0 10.8 1.1 3.4 ... 0.600 0.2 0.7 0.9 0.8 0.3 0.0 0.5 0.6 3.3
496 370 Svi Mykhailiuk SF 21 DET 3 0 6.7 0.7 2.7 ... 0.000 0.3 0.3 0.7 1.3 0.3 0.0 0.3 0.0 2.0
497 371 Abdel Nader SF 25 OKC 61 1 11.4 1.5 3.5 ... 0.750 0.2 1.7 1.9 0.3 0.3 0.2 0.4 1.1 4.0
498 372 Larry Nance Jr. C 26 CLE 67 30 26.8 3.7 7.1 ... 0.716 2.5 5.7 8.2 3.2 1.5 0.6 1.4 2.9 9.4
499 373 Shabazz Napier PG 27 BRK 56 2 17.6 3.0 7.8 ... 0.833 0.3 1.5 1.8 2.6 0.7 0.3 1.2 1.2 9.4
500 374 Raul Neto PG 26 UTA 37 1 12.8 2.0 4.4 ... 0.848 0.2 1.5 1.7 2.5 0.4 0.1 0.9 1.3 5.3
501 375 Georges Niang PF 25 UTA 59 0 8.7 1.5 3.1 ... 0.833 0.2 1.3 1.5 0.6 0.2 0.1 0.4 1.0 4.0
502 376 Joakim Noah C 33 MEM 42 1 16.5 2.6 5.1 ... 0.716 1.4 4.3 5.7 2.1 0.5 0.7 1.2 2.3 7.1
503 377 Nerlens Noel C 24 OKC 77 2 13.7 2.1 3.6 ... 0.684 1.6 2.6 4.2 0.6 0.9 1.2 0.6 2.2 4.9
504 378 Dirk Nowitzki PF 40 DAL 51 20 15.6 2.6 7.4 ... 0.780 0.1 3.0 3.1 0.7 0.2 0.4 0.4 1.5 7.3
505 379 Frank Ntilikina PG 20 NYK 43 16 21.0 2.2 6.6 ... 0.767 0.3 1.7 2.0 2.8 0.7 0.3 1.3 2.4 5.7
506 380 James Nunnally SF 28 TOT 15 0 6.8 0.8 2.3 ... 1.000 0.0 0.3 0.3 0.5 0.1 0.0 0.1 0.7 2.4
507 380 James Nunnally SF 28 MIN 13 0 4.9 0.7 1.6 ... 1.000 0.0 0.3 0.3 0.4 0.1 0.0 0.1 0.3 2.1
508 380 James Nunnally SF 28 HOU 2 0 19.0 1.5 6.5 ... 0.000 0.0 0.5 0.5 1.0 0.0 0.0 0.0 3.0 4.5
509 381 Jusuf Nurkić C 24 POR 72 72 27.4 5.8 11.5 ... 0.773 3.4 7.0 10.4 3.2 1.0 1.4 2.3 3.5 15.6
510 382 David Nwaba SF 26 CLE 51 14 19.3 2.5 5.1 ... 0.682 0.8 2.4 3.2 1.1 0.7 0.3 0.6 2.1 6.5
511 383 Royce O'Neale SF 25 UTA 82 16 20.4 2.0 4.2 ... 0.762 0.3 3.2 3.5 1.5 0.7 0.3 0.9 2.1 5.2
512 384 Kyle O'Quinn C 28 IND 45 3 8.2 1.5 3.0 ... 0.810 0.6 2.0 2.6 1.2 0.2 0.6 0.7 1.5 3.5
513 385 Semi Ojeleye PF 24 BOS 56 3 10.6 1.2 2.8 ... 0.615 0.4 1.1 1.5 0.4 0.2 0.1 0.3 0.8 3.3
514 386 Jahlil Okafor C 23 NOP 59 24 15.8 3.6 6.1 ... 0.663 1.4 3.3 4.7 0.7 0.3 0.7 0.9 1.6 8.2
515 387 Elie Okobo PG 21 PHO 53 16 18.1 2.2 5.5 ... 0.787 0.2 1.6 1.8 2.4 0.6 0.1 1.3 2.1 5.7
516 388 Josh Okogie SG 20 MIN 74 52 23.7 2.6 6.9 ... 0.728 0.6 2.4 2.9 1.2 1.2 0.4 0.9 2.2 7.7
517 389 Victor Oladipo SG 26 IND 36 36 31.9 6.9 16.3 ... 0.730 0.6 5.0 5.6 5.2 1.7 0.3 2.3 2.0 18.8
518 390 Kelly Olynyk PF 27 MIA 79 36 22.9 3.3 7.1 ... 0.822 0.9 3.8 4.7 1.8 0.7 0.5 1.4 2.3 10.0
519 391 Cedi Osman SF 23 CLE 76 75 32.2 4.7 11.1 ... 0.779 0.6 4.1 4.7 2.6 0.8 0.1 1.5 2.6 13.0
520 392 Kelly Oubre Jr. SF 23 TOT 69 19 28.0 5.4 12.2 ... 0.775 1.0 3.7 4.7 1.2 1.2 0.9 1.5 2.6 15.2
521 392 Kelly Oubre Jr. SF 23 WAS 29 7 26.0 4.6 10.5 ... 0.800 0.8 3.6 4.4 0.7 0.9 0.7 1.0 2.4 12.9
522 392 Kelly Oubre Jr. SF 23 PHO 40 12 29.5 6.1 13.4 ... 0.761 1.2 3.7 4.9 1.6 1.4 1.0 1.8 2.8 16.9
523 393 Zaza Pachulia C 34 DET 68 3 12.9 1.3 2.8 ... 0.782 1.5 2.4 3.9 1.3 0.5 0.3 0.8 2.2 3.9
524 394 Jabari Parker PF 23 TOT 64 17 26.9 5.8 11.7 ... 0.712 1.2 5.3 6.6 2.4 0.7 0.5 2.4 2.3 14.5
525 394 Jabari Parker PF 23 CHI 39 17 26.7 5.6 11.9 ... 0.731 1.1 5.1 6.2 2.2 0.6 0.4 2.2 2.2 14.3
526 394 Jabari Parker PF 23 WAS 25 0 27.3 6.0 11.4 ... 0.684 1.5 5.7 7.2 2.7 0.9 0.6 2.7 2.3 15.0
527 395 Tony Parker PG 36 CHO 56 0 17.9 3.8 8.3 ... 0.734 0.3 1.2 1.5 3.7 0.4 0.1 1.3 0.9 9.5
528 396 Chandler Parsons SF 30 MEM 25 3 19.8 2.7 7.3 ... 0.880 0.2 2.6 2.8 1.7 0.8 0.2 1.3 1.8 7.5
529 397 Patrick Patterson PF 29 OKC 63 5 13.7 1.3 3.5 ... 0.633 0.7 1.7 2.3 0.5 0.3 0.2 0.3 0.7 3.6
530 398 Justin Patton C 21 PHI 3 0 7.0 0.7 2.3 ... 0.500 0.7 1.3 2.0 1.0 0.7 0.0 0.0 1.7 1.7
531 399 Chris Paul PG 33 HOU 58 58 32.0 5.2 12.4 ... 0.862 0.6 3.9 4.6 8.2 2.0 0.3 2.6 2.5 15.6
532 400 Cameron Payne PG 24 TOT 40 13 17.8 2.4 5.6 ... 0.805 0.3 1.5 1.8 2.7 0.7 0.2 1.1 1.6 6.3
533 400 Cameron Payne PG 24 CHI 31 12 17.3 2.2 5.4 ... 0.880 0.3 1.4 1.7 2.7 0.6 0.2 1.1 1.6 5.7
534 400 Cameron Payne PG 24 CLE 9 1 19.6 3.0 6.1 ... 0.688 0.3 1.8 2.1 2.6 0.9 0.3 1.2 1.7 8.2
535 401 Elfrid Payton PG 24 NOP 42 42 29.8 4.3 9.8 ... 0.743 1.2 4.1 5.2 7.6 1.0 0.4 2.7 1.9 10.6
536 402 Gary Payton II PG 26 WAS 3 0 5.3 1.7 2.7 ... 0.000 0.3 0.3 0.7 1.3 1.0 0.3 0.3 0.7 3.7
537 403 Theo Pinson SG 23 BRK 18 0 11.7 1.4 4.1 ... 0.864 0.2 1.8 2.0 1.2 0.3 0.0 1.0 0.8 4.5
538 404 Mason Plumlee C 28 DEN 82 17 21.1 3.2 5.4 ... 0.561 2.0 4.4 6.4 3.0 0.8 0.9 1.5 3.1 7.8
539 405 Miles Plumlee C 30 ATL 18 0 9.6 1.8 2.7 ... 0.533 0.9 1.3 2.2 0.9 0.3 0.2 0.6 0.8 4.4
540 406 Jakob Poeltl C 23 SAS 77 24 16.5 2.4 3.8 ... 0.533 2.3 3.0 5.3 1.2 0.4 0.9 0.6 1.6 5.5
541 407 Quincy Pondexter SF 30 SAS 53 0 5.5 0.5 1.1 ... 0.810 0.2 0.7 0.9 0.5 0.2 0.0 0.2 0.5 1.8
542 408 Otto Porter Jr. SF 25 TOT 56 43 30.1 5.3 11.5 ... 0.813 1.0 4.6 5.6 2.1 1.5 0.6 1.2 1.9 13.9
543 408 Otto Porter Jr. SF 25 WAS 41 28 29.0 4.9 10.8 ... 0.766 1.0 4.7 5.6 2.0 1.6 0.5 1.0 1.9 12.6
544 408 Otto Porter Jr. SF 25 CHI 15 15 32.8 6.5 13.4 ... 0.906 0.9 4.6 5.5 2.7 1.2 0.6 1.7 1.9 17.5
545 409 Bobby Portis PF 23 TOT 50 28 26.0 5.6 12.6 ... 0.794 2.2 5.9 8.1 1.4 0.7 0.4 1.5 2.9 14.2
546 409 Bobby Portis PF 23 CHI 22 6 24.1 5.5 12.3 ... 0.780 2.1 5.2 7.3 1.3 0.5 0.4 1.3 2.8 14.1
547 409 Bobby Portis PF 23 WAS 28 22 27.4 5.6 12.8 ... 0.809 2.3 6.4 8.6 1.5 0.9 0.4 1.6 3.0 14.3
548 410 Dwight Powell C 27 DAL 77 22 21.6 3.8 6.3 ... 0.772 1.8 3.5 5.3 1.5 0.6 0.6 0.9 2.6 10.6
549 411 Norman Powell SG 25 TOR 60 3 18.8 3.2 6.7 ... 0.827 0.3 2.1 2.3 1.5 0.7 0.2 1.1 1.6 8.6
550 412 Alex Poythress PF 25 ATL 21 1 14.5 1.9 3.9 ... 0.621 1.4 2.2 3.6 0.8 0.2 0.5 0.6 2.2 5.1
551 413 Taurean Prince SF 24 ATL 55 47 28.2 4.8 10.8 ... 0.819 0.4 3.2 3.6 2.1 1.0 0.3 1.8 2.6 13.5
552 414 Zhou Qi PF 23 HOU 1 0 1.0 1.0 1.0 ... 0.000 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0
553 415 Ivan Rabb PF 21 MEM 49 13 14.7 2.4 4.3 ... 0.710 1.4 2.8 4.2 1.1 0.3 0.3 0.7 1.8 5.8
554 416 Chasson Randle PG 25 WAS 49 2 15.2 1.9 4.4 ... 0.694 0.2 0.9 1.1 2.0 0.5 0.1 0.9 1.9 5.5
555 417 Julius Randle PF 24 NOP 73 49 30.6 7.8 14.9 ... 0.731 2.2 6.5 8.7 3.1 0.7 0.6 2.8 3.4 21.4
556 418 J.J. Redick SG 34 PHI 76 63 31.3 5.9 13.5 ... 0.894 0.3 2.2 2.4 2.7 0.4 0.2 1.3 1.7 18.1
557 419 Davon Reed SG 23 IND 10 0 4.7 0.5 1.2 ... 0.000 0.2 0.4 0.6 0.3 0.1 0.0 0.1 0.3 1.2
558 420 Cameron Reynolds SG 23 MIN 19 0 13.6 1.7 4.1 ... 0.889 0.2 1.4 1.6 0.7 0.3 0.1 0.3 1.4 5.0
559 421 Josh Richardson SG 25 MIA 73 73 34.8 5.8 14.1 ... 0.861 0.7 2.9 3.6 4.1 1.1 0.5 1.5 2.7 16.6
560 422 Malachi Richardson SG 23 TOR 22 0 4.7 0.4 1.3 ... 0.800 0.1 0.5 0.6 0.0 0.0 0.0 0.4 0.6 1.4
561 423 Austin Rivers SG 26 TOT 76 15 26.7 3.1 7.5 ... 0.526 0.3 1.8 2.1 2.2 0.6 0.3 0.9 2.7 8.1
562 423 Austin Rivers SG 26 WAS 29 2 23.6 2.6 6.7 ... 0.543 0.3 2.1 2.4 2.0 0.6 0.3 1.2 2.5 7.2
563 423 Austin Rivers SG 26 HOU 47 13 28.6 3.3 8.0 ... 0.510 0.3 1.6 1.9 2.3 0.6 0.3 0.7 2.9 8.7
564 424 Devin Robinson SF 23 WAS 7 0 13.6 2.7 4.6 ... 0.643 0.9 2.0 2.9 0.9 0.6 0.9 0.3 1.6 6.7
565 425 Duncan Robinson SF 24 MIA 15 1 10.7 1.2 3.1 ... 0.667 0.1 1.1 1.3 0.3 0.3 0.0 0.3 0.7 3.3
566 426 Glenn Robinson III SF 25 DET 47 18 13.0 1.6 3.7 ... 0.800 0.4 1.1 1.5 0.4 0.3 0.2 0.4 1.0 4.2
567 427 Jerome Robinson SG 21 LAC 33 0 9.7 1.3 3.3 ... 0.667 0.1 1.2 1.2 0.6 0.3 0.1 0.4 1.4 3.4
568 428 Mitchell Robinson C 20 NYK 66 19 20.6 3.1 4.4 ... 0.600 2.7 3.7 6.4 0.6 0.8 2.4 0.5 3.3 7.3
569 429 Rajon Rondo PG 32 LAL 46 29 29.8 3.8 9.4 ... 0.639 0.7 4.5 5.3 8.0 1.2 0.2 2.8 2.2 9.2
570 430 Derrick Rose PG 30 MIN 51 13 27.3 7.1 14.8 ... 0.856 0.6 2.1 2.7 4.3 0.6 0.2 1.6 1.1 18.0
571 431 Terrence Ross SG 27 ORL 81 0 26.5 5.4 12.7 ... 0.875 0.3 3.1 3.5 1.7 0.9 0.4 1.1 1.5 15.1
572 432 Terry Rozier PG 24 BOS 79 14 22.7 3.3 8.4 ... 0.785 0.4 3.5 3.9 2.9 0.9 0.3 0.9 1.3 9.0
573 433 Ricky Rubio PG 28 UTA 68 67 27.9 4.3 10.7 ... 0.855 0.5 3.1 3.6 6.1 1.3 0.1 2.6 2.6 12.7
574 434 D'Angelo Russell PG 22 BRK 81 81 30.2 8.1 18.7 ... 0.780 0.7 3.2 3.9 7.0 1.2 0.2 3.1 1.7 21.1
575 435 Domantas Sabonis C 22 IND 74 5 24.8 5.6 9.5 ... 0.715 2.5 6.8 9.3 2.9 0.6 0.4 2.2 3.2 14.1
576 436 Brandon Sampson SG 21 CHI 14 2 15.3 2.0 4.3 ... 0.667 0.2 0.9 1.1 0.7 0.6 0.2 0.9 1.4 5.1
577 437 JaKarr Sampson SF 25 CHI 4 0 31.8 7.3 13.5 ... 0.810 1.3 6.8 8.0 1.0 1.0 0.8 1.0 2.0 20.0
578 438 Dario Šarić PF 24 TOT 81 41 25.0 3.8 8.6 ... 0.880 1.6 4.1 5.6 1.6 0.6 0.1 1.2 2.2 10.6
579 438 Dario Šarić PF 24 PHI 13 13 30.5 3.7 10.2 ... 0.900 1.6 5.0 6.6 2.0 0.3 0.2 1.9 3.0 11.1
580 438 Dario Šarić PF 24 MIN 68 28 23.9 3.8 8.3 ... 0.875 1.5 3.9 5.5 1.5 0.6 0.1 1.1 2.1 10.5
581 439 Tomáš Satoranský PG 27 WAS 80 54 27.1 3.2 6.6 ... 0.819 1.0 2.5 3.5 5.0 1.0 0.2 1.5 2.2 8.9
582 440 Dennis Schröder PG 25 OKC 79 14 29.3 5.8 14.0 ... 0.819 0.5 3.1 3.6 4.1 0.8 0.2 2.2 2.4 15.5
583 441 Mike Scott PF 30 TOT 79 3 17.7 2.1 5.3 ... 0.667 0.5 2.9 3.5 0.8 0.3 0.2 0.6 2.0 5.8
584 441 Mike Scott PF 30 LAC 52 0 14.4 1.8 4.4 ... 0.667 0.5 2.9 3.3 0.8 0.3 0.2 0.5 1.7 4.8
585 441 Mike Scott PF 30 PHI 27 3 24.0 2.8 7.0 ... 0.667 0.7 3.1 3.8 0.8 0.3 0.2 0.6 2.5 7.8
586 442 Thabo Sefolosha SF 34 UTA 50 2 12.2 1.4 3.0 ... 0.636 0.2 2.3 2.5 0.5 0.9 0.1 0.5 0.8 3.8
587 443 Wayne Selden SG 24 TOT 75 13 19.2 2.6 6.4 ... 0.728 0.5 1.9 2.4 1.5 0.4 0.2 1.1 1.7 6.9
588 443 Wayne Selden SG 24 MEM 32 0 14.2 2.0 5.0 ... 0.759 0.5 0.9 1.4 1.1 0.3 0.2 0.7 1.5 5.4
589 443 Wayne Selden SG 24 CHI 43 13 22.9 3.0 7.5 ... 0.714 0.5 2.7 3.2 1.7 0.5 0.2 1.3 1.9 8.0
590 444 Collin Sexton PG 20 CLE 82 72 31.8 6.3 14.7 ... 0.839 0.7 2.2 2.9 3.0 0.5 0.1 2.3 2.3 16.7
591 445 Landry Shamet SG 21 TOT 79 27 22.8 3.0 7.1 ... 0.806 0.3 1.4 1.7 1.5 0.5 0.1 0.6 2.0 9.1
592 445 Landry Shamet SG 21 PHI 54 4 20.5 2.8 6.4 ... 0.815 0.3 1.2 1.4 1.1 0.4 0.1 0.5 2.0 8.3
593 445 Landry Shamet SG 21 LAC 25 23 27.8 3.5 8.4 ... 0.795 0.3 2.0 2.2 2.3 0.5 0.1 0.8 2.0 10.9
594 446 Iman Shumpert SG 28 TOT 62 41 23.9 2.7 7.2 ... 0.800 0.4 2.5 3.0 1.8 1.0 0.4 0.8 2.0 7.5
595 446 Iman Shumpert SG 28 SAC 42 40 26.2 3.2 8.3 ... 0.829 0.5 2.6 3.1 2.2 1.1 0.5 0.9 2.2 8.9
596 446 Iman Shumpert SG 28 HOU 20 1 19.1 1.7 4.9 ... 0.500 0.4 2.3 2.7 1.1 0.6 0.2 0.6 1.8 4.6
597 447 Pascal Siakam PF 24 TOR 80 79 31.9 6.5 11.8 ... 0.785 1.6 5.3 6.9 3.1 0.9 0.7 1.9 3.0 16.9
598 448 Jordan Sibert SG 26 ATL 1 0 4.0 1.0 1.0 ... 0.000 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.0
599 449 Ben Simmons PG 22 PHI 79 79 34.2 6.8 12.2 ... 0.600 2.2 6.6 8.8 7.7 1.4 0.8 3.5 2.6 16.9
600 450 Jonathon Simmons SG-SF 29 TOT 56 9 19.0 2.4 6.3 ... 0.742 0.5 1.8 2.3 2.3 0.5 0.3 1.2 1.6 6.5
601 450 Jonathon Simmons SG 29 ORL 41 9 20.6 2.5 7.0 ... 0.778 0.6 1.9 2.4 2.3 0.4 0.3 1.4 1.7 6.9
602 450 Jonathon Simmons SF 29 PHI 15 0 14.6 1.9 4.3 ... 0.640 0.3 1.5 1.7 2.2 0.7 0.1 0.8 1.4 5.5
603 451 Kobi Simmons PG 21 CLE 1 0 2.0 0.0 0.0 ... 0.000 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
604 452 Anfernee Simons SG 19 POR 20 1 7.1 1.4 3.2 ... 0.563 0.2 0.5 0.7 0.7 0.1 0.0 0.6 0.5 3.8
605 453 Marcus Smart SG 24 BOS 80 60 27.5 3.0 7.1 ... 0.806 0.7 2.2 2.9 4.0 1.8 0.4 1.5 2.5 8.9
606 454 Dennis Smith Jr. PG 21 TOT 53 50 28.5 5.2 12.3 ... 0.635 0.6 2.3 2.9 4.8 1.3 0.4 2.9 2.4 13.6
607 454 Dennis Smith Jr. PG 21 DAL 32 32 28.4 4.9 11.2 ... 0.695 0.6 2.5 3.0 4.3 1.3 0.3 3.1 2.6 12.9
608 454 Dennis Smith Jr. PG 21 NYK 21 18 28.6 5.8 14.0 ... 0.568 0.7 2.1 2.8 5.4 1.3 0.4 2.6 2.2 14.7
609 455 Ish Smith PG 30 DET 56 0 22.3 3.7 8.7 ... 0.758 0.4 2.2 2.6 3.6 0.5 0.2 1.1 1.9 8.9
610 456 J.R. Smith SG 33 CLE 11 4 20.2 2.5 7.2 ... 0.800 0.0 1.6 1.6 1.9 1.0 0.3 1.0 1.7 6.7
611 457 Jason Smith C-PF 32 TOT 20 1 9.5 1.1 3.0 ... 0.875 0.8 1.8 2.6 0.7 0.2 0.4 0.7 1.5 3.3
612 457 Jason Smith C 32 WAS 12 1 10.8 1.3 3.1 ... 0.833 0.9 2.2 3.1 1.0 0.1 0.4 0.6 1.8 3.7
613 457 Jason Smith PF 32 MIL 6 0 6.7 0.7 2.2 ... 1.000 0.5 1.3 1.8 0.2 0.3 0.3 0.8 1.0 2.2
614 457 Jason Smith C 32 NOP 2 0 10.0 1.0 4.5 ... 1.000 1.0 1.0 2.0 0.5 0.0 0.0 0.5 1.5 4.0
615 458 Zhaire Smith SG 19 PHI 6 2 18.5 2.3 5.7 ... 0.750 0.5 1.7 2.2 1.7 0.3 0.3 1.0 1.3 6.7
616 459 Tony Snell SF 27 MIL 74 12 17.6 2.2 4.9 ... 0.881 0.4 1.7 2.1 0.9 0.4 0.2 0.3 1.2 6.0
617 460 Ray Spalding PF 21 TOT 14 3 10.6 1.8 3.4 ... 0.333 1.1 2.4 3.4 0.4 0.6 0.6 0.6 1.6 3.9
618 460 Ray Spalding PF 21 DAL 1 0 1.0 0.0 0.0 ... 0.000 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
619 460 Ray Spalding PF 21 PHO 13 3 11.3 1.9 3.6 ... 0.333 1.2 2.5 3.7 0.4 0.7 0.6 0.7 1.8 4.2
620 461 Omari Spellman PF 21 ATL 46 11 17.5 2.1 5.3 ... 0.711 1.6 2.7 4.2 1.0 0.6 0.5 0.7 1.5 5.9
621 462 Nik Stauskas SG 25 TOT 68 0 14.9 2.0 5.0 ... 0.891 0.3 1.6 1.9 1.2 0.3 0.1 0.8 0.7 5.9
622 462 Nik Stauskas SG 25 POR 44 0 15.3 2.2 5.2 ... 0.889 0.2 1.6 1.8 1.4 0.3 0.1 0.9 0.7 6.1
623 462 Nik Stauskas SG 25 CLE 24 0 14.3 1.7 4.5 ... 0.893 0.3 1.6 2.0 0.8 0.3 0.1 0.5 0.8 5.5
624 463 D.J. Stephens SG 28 MEM 1 0 7.0 1.0 2.0 ... 0.000 0.0 0.0 0.0 0.0 1.0 0.0 1.0 0.0 2.0
625 464 Lance Stephenson SG 28 LAL 68 3 16.5 2.7 6.4 ... 0.685 0.5 2.7 3.2 2.1 0.6 0.1 1.3 1.6 7.2
626 465 Edmond Sumner PG 23 IND 23 2 9.1 1.0 2.8 ... 0.625 0.4 0.7 1.0 0.4 0.5 0.2 0.4 1.1 2.9
627 466 Caleb Swanigan PF 21 TOT 21 0 8.5 0.9 2.5 ... 0.667 0.8 2.2 3.0 0.5 0.3 0.0 0.9 1.3 2.0
628 466 Caleb Swanigan PF 21 POR 18 0 8.1 0.8 2.4 ... 0.857 0.7 2.2 2.9 0.4 0.2 0.0 0.9 1.2 1.9
629 466 Caleb Swanigan PF 21 SAC 3 0 11.0 1.3 3.0 ... 0.000 1.3 2.7 4.0 1.3 0.7 0.3 0.7 2.0 2.7
630 467 Jayson Tatum SF 20 BOS 79 79 31.1 5.9 13.1 ... 0.855 0.9 5.2 6.0 2.1 1.1 0.7 1.5 2.1 15.7
631 468 Jeff Teague PG 30 MIN 42 41 30.1 4.2 9.9 ... 0.804 0.4 2.1 2.5 8.2 1.0 0.4 2.3 2.1 12.1
632 469 Garrett Temple SG 32 TOT 75 55 27.2 2.8 6.6 ... 0.748 0.4 2.5 2.9 1.4 1.0 0.4 0.9 2.7 7.8
633 469 Garrett Temple SG 32 MEM 49 49 31.2 3.4 7.9 ... 0.750 0.4 2.7 3.1 1.4 1.0 0.5 1.1 2.7 9.4
634 469 Garrett Temple SG 32 LAC 26 6 19.6 1.6 4.1 ... 0.742 0.4 2.1 2.5 1.4 1.0 0.2 0.6 2.7 4.7
635 470 Miloš Teodosić PG 31 LAC 15 0 10.0 1.1 2.7 ... 0.571 0.2 0.9 1.1 2.1 0.2 0.1 1.4 1.8 3.2
636 471 Jared Terrell SG 23 MIN 14 0 7.9 0.9 2.8 ... 0.500 0.1 0.4 0.4 0.9 0.2 0.1 0.7 1.1 2.2
637 472 Emanuel Terry PF 22 TOT 3 0 7.7 1.3 2.3 ... 0.500 1.0 1.3 2.3 0.7 1.0 0.0 0.7 1.3 3.3
638 472 Emanuel Terry PF 22 PHO 2 0 10.0 2.0 3.0 ... 0.500 1.0 2.0 3.0 0.5 1.5 0.0 1.0 2.0 4.5
639 472 Emanuel Terry PF 22 MIA 1 0 3.0 0.0 1.0 ... 0.500 1.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0
640 473 Daniel Theis C 26 BOS 66 2 13.8 2.2 4.0 ... 0.737 1.3 2.1 3.4 1.0 0.3 0.6 0.5 2.4 5.7
641 474 Isaiah Thomas SG 29 DEN 12 0 15.1 2.8 8.3 ... 0.630 0.4 0.7 1.1 1.9 0.4 0.1 1.5 1.4 8.1
642 475 Khyri Thomas SG 22 DET 26 0 7.5 0.8 2.7 ... 0.636 0.2 0.6 0.8 0.3 0.3 0.2 0.2 0.8 2.3
643 476 Lance Thomas PF 30 NYK 46 17 17.0 1.7 4.3 ... 0.750 0.5 2.1 2.5 0.6 0.4 0.2 0.5 1.8 4.5
644 477 Klay Thompson SG 28 GSW 78 78 34.0 8.4 18.0 ... 0.816 0.5 3.4 3.8 2.4 1.1 0.6 1.5 2.0 21.5
645 478 Tristan Thompson C 27 CLE 43 40 27.9 4.7 8.8 ... 0.642 4.0 6.2 10.2 2.0 0.7 0.4 1.4 2.1 10.9
646 479 Sindarius Thornwell SG 24 LAC 64 1 4.9 0.3 0.8 ... 0.735 0.1 0.6 0.7 0.3 0.2 0.1 0.3 0.6 1.0
647 480 Anthony Tolliver PF 33 MIN 65 0 16.6 1.5 4.0 ... 0.783 0.2 2.5 2.7 0.7 0.3 0.3 0.6 1.4 5.0
648 481 Karl-Anthony Towns C 23 MIN 77 77 33.1 8.8 17.1 ... 0.836 3.4 9.0 12.4 3.4 0.9 1.6 3.1 3.8 24.4
649 482 Gary Trent Jr. SG 20 POR 15 1 7.4 1.1 3.3 ... 0.429 0.1 0.7 0.7 0.3 0.1 0.1 0.3 0.3 2.7
650 483 Allonzo Trier SG 23 NYK 64 3 22.8 3.6 8.1 ... 0.803 0.5 2.6 3.1 1.9 0.4 0.2 1.8 1.8 10.9
651 484 P.J. Tucker PF 33 HOU 82 82 34.2 2.5 6.4 ... 0.695 1.5 4.4 5.8 1.2 1.6 0.5 0.8 3.1 7.3
652 485 Evan Turner PG 30 POR 73 2 22.0 2.8 6.1 ... 0.708 0.5 4.0 4.5 3.9 0.5 0.2 1.6 1.5 6.8
653 486 Myles Turner C 22 IND 74 74 28.6 5.1 10.5 ... 0.736 1.4 5.8 7.2 1.6 0.8 2.7 1.4 2.6 13.3
654 487 Ekpe Udoh C 31 UTA 51 1 6.3 1.0 1.4 ... 0.633 0.5 1.2 1.8 0.5 0.2 0.6 0.3 0.7 2.3
655 488 Tyler Ulis PG 23 CHI 1 0 1.0 0.0 0.0 ... 0.000 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
656 489 Jonas Valančiūnas C 26 TOT 49 27 22.3 6.1 11.0 ... 0.795 2.2 6.4 8.6 1.4 0.4 1.1 1.8 3.0 15.6
657 489 Jonas Valančiūnas C 26 TOR 30 10 18.8 5.0 8.6 ... 0.819 1.8 5.4 7.2 1.0 0.4 0.8 1.3 2.7 12.8
658 489 Jonas Valančiūnas C 26 MEM 19 17 27.7 8.0 14.7 ... 0.769 2.7 7.9 10.7 2.2 0.3 1.6 2.7 3.4 19.9
659 490 Jarred Vanderbilt PF 19 DEN 17 0 4.1 0.5 1.1 ... 0.600 0.4 0.9 1.4 0.2 0.4 0.1 0.5 0.5 1.4
660 491 Fred VanVleet PG 24 TOR 64 28 27.5 3.8 9.4 ... 0.843 0.3 2.3 2.6 4.8 0.9 0.3 1.3 1.7 11.0
661 492 Noah Vonleh PF 23 NYK 68 57 25.3 3.0 6.5 ... 0.712 1.7 6.1 7.8 1.9 0.7 0.8 1.3 2.6 8.4
662 493 Nikola Vučević C 28 ORL 80 80 31.4 8.8 16.9 ... 0.789 2.8 9.2 12.0 3.8 1.0 1.1 2.0 2.0 20.8
663 494 Dwyane Wade SG 37 MIA 72 2 26.2 5.8 13.3 ... 0.708 1.0 3.0 4.0 4.2 0.8 0.5 2.3 1.6 15.0
664 495 Moritz Wagner C 21 LAL 43 5 10.4 1.7 4.0 ... 0.811 0.4 1.6 2.0 0.6 0.3 0.3 0.9 1.3 4.8
665 496 Dion Waiters SG 27 MIA 44 28 25.9 4.5 10.9 ... 0.500 0.2 2.5 2.6 2.8 0.7 0.2 1.5 1.6 12.0
666 497 Kemba Walker PG 28 CHO 82 82 34.9 8.9 20.5 ... 0.844 0.6 3.8 4.4 5.9 1.2 0.4 2.6 1.6 25.6
667 498 Lonnie Walker IV SG 20 SAS 17 0 6.9 0.9 2.7 ... 0.800 0.0 1.0 1.0 0.5 0.4 0.2 0.2 0.4 2.6
668 499 John Wall PG 28 WAS 32 32 34.5 7.7 17.3 ... 0.697 0.5 3.2 3.6 8.7 1.5 0.9 3.8 2.2 20.7
669 500 Tyrone Wallace PG 24 LAC 62 0 10.1 1.5 3.5 ... 0.526 0.3 1.3 1.6 0.7 0.3 0.1 0.6 1.3 3.5
670 501 Brad Wanamaker PG 29 BOS 36 0 9.5 1.4 2.9 ... 0.857 0.1 1.1 1.1 1.6 0.3 0.1 0.5 0.9 3.9
671 502 T.J. Warren SF 25 PHO 43 36 31.6 6.9 14.2 ... 0.815 0.7 3.3 4.0 1.5 1.2 0.7 1.2 2.8 18.0
672 503 Julian Washburn SF 27 MEM 18 3 14.1 0.9 2.7 ... 0.750 0.4 1.8 2.3 0.8 0.7 0.1 0.4 0.9 2.2
673 504 Yuta Watanabe SF 24 MEM 15 0 11.6 1.0 3.4 ... 0.700 0.3 1.8 2.1 0.5 0.3 0.1 0.4 0.7 2.6
674 505 Thomas Welsh C 22 DEN 11 0 3.3 0.6 1.2 ... 0.500 0.0 0.4 0.4 0.5 0.0 0.0 0.1 0.3 1.6
675 506 Russell Westbrook PG 30 OKC 73 73 36.0 8.6 20.2 ... 0.656 1.5 9.6 11.1 10.7 1.9 0.5 4.5 3.4 22.9
676 507 Derrick White PG 24 SAS 67 55 25.8 3.9 8.1 ... 0.772 0.5 3.2 3.7 3.9 1.0 0.7 1.4 2.2 9.9
677 508 Okaro White PF 26 WAS 3 0 2.0 0.0 0.7 ... 0.000 0.3 0.3 0.7 0.0 0.0 0.0 0.0 0.0 0.0
678 509 Hassan Whiteside C 29 MIA 72 53 23.3 5.4 9.4 ... 0.449 3.6 7.8 11.3 0.8 0.6 1.9 1.3 2.7 12.3
679 510 Andrew Wiggins SF 23 MIN 73 73 34.8 6.8 16.6 ... 0.699 1.1 3.7 4.8 2.5 1.0 0.7 1.9 2.1 18.1
680 511 Alan Williams PF 26 BRK 5 0 5.2 1.6 2.6 ... 0.500 0.8 3.0 3.8 0.6 0.2 0.0 0.2 0.4 3.6
681 512 C.J. Williams SG 28 MIN 15 0 8.5 1.1 2.3 ... 0.000 0.1 0.5 0.5 0.8 0.4 0.0 0.3 1.1 2.6
682 513 Johnathan Williams C 23 LAL 24 0 15.5 2.7 4.6 ... 0.563 2.0 2.1 4.1 0.5 0.3 0.3 0.7 2.6 6.5
683 514 Kenrich Williams SF 24 NOP 46 29 23.5 2.3 6.1 ... 0.684 1.2 3.6 4.8 1.8 1.0 0.4 0.8 2.1 6.1
684 515 Lou Williams SG 32 LAC 75 1 26.6 6.5 15.2 ... 0.876 0.5 2.4 3.0 5.4 0.8 0.1 2.4 1.1 20.0
685 516 Marvin Williams PF 32 CHO 75 75 28.4 3.7 8.7 ... 0.767 1.0 4.4 5.4 1.2 0.9 0.8 0.6 2.1 10.1
686 517 Robert Williams C 21 BOS 32 2 8.8 1.1 1.6 ... 0.600 0.8 1.7 2.5 0.2 0.3 1.3 0.3 1.1 2.5
687 518 Troy Williams SF 24 SAC 21 0 14.9 2.1 4.7 ... 0.600 0.6 2.2 2.8 0.5 0.5 0.4 0.4 1.8 5.3
688 519 D.J. Wilson PF 22 MIL 48 3 18.4 2.2 5.2 ... 0.553 0.9 3.7 4.6 1.1 0.4 0.4 0.7 1.8 5.8
689 520 Justise Winslow SF 22 MIA 66 52 29.7 4.9 11.3 ... 0.628 1.0 4.4 5.4 4.3 1.1 0.3 2.2 2.7 12.6
690 521 Christian Wood PF 23 TOT 21 2 12.0 2.9 5.6 ... 0.732 0.8 3.1 4.0 0.4 0.3 0.5 0.8 0.8 8.2
691 521 Christian Wood PF 23 MIL 13 0 4.8 0.9 1.9 ... 0.667 0.3 1.2 1.5 0.2 0.0 0.0 0.2 0.2 2.8
692 521 Christian Wood PF 23 NOP 8 2 23.6 6.1 11.5 ... 0.756 1.6 6.3 7.9 0.8 0.9 1.3 1.8 1.8 16.9
693 522 Delon Wright PG 26 TOT 75 13 22.7 3.2 7.4 ... 0.793 0.9 2.6 3.5 3.3 1.2 0.4 1.0 1.4 8.7
694 522 Delon Wright PG 26 TOR 49 2 18.3 2.6 6.0 ... 0.869 0.8 1.8 2.6 2.2 0.9 0.3 0.8 1.1 6.9
695 522 Delon Wright PG 26 MEM 26 11 30.8 4.4 10.2 ... 0.742 1.1 4.3 5.4 5.3 1.6 0.6 1.5 1.9 12.2
696 523 Guerschon Yabusele PF 23 BOS 41 1 6.1 0.9 1.9 ... 0.682 0.6 0.7 1.3 0.4 0.2 0.2 0.4 0.8 2.3
697 524 Nick Young SG 33 DEN 4 0 9.3 0.8 2.3 ... 0.000 0.0 0.3 0.3 0.5 0.0 0.3 0.5 1.0 2.3
698 525 Thaddeus Young PF 30 IND 81 81 30.7 5.5 10.4 ... 0.644 2.4 4.1 6.5 2.5 1.5 0.4 1.5 2.4 12.6
699 526 Trae Young PG 20 ATL 81 81 30.9 6.5 15.5 ... 0.829 0.8 2.9 3.7 8.1 0.9 0.2 3.8 1.7 19.1
700 527 Cody Zeller C 26 CHO 49 47 25.4 3.9 7.0 ... 0.787 2.2 4.6 6.8 2.1 0.8 0.8 1.3 3.3 10.1
701 528 Tyler Zeller C 29 TOT 6 1 15.5 2.7 5.0 ... 0.778 1.8 2.2 4.0 0.7 0.2 0.5 0.7 3.3 7.7
702 528 Tyler Zeller C 29 ATL 2 0 5.5 0.0 1.0 ... 0.000 1.0 2.0 3.0 0.5 0.0 0.0 0.0 2.0 0.0
703 528 Tyler Zeller C 29 MEM 4 1 20.5 4.0 7.0 ... 0.778 2.3 2.3 4.5 0.8 0.3 0.8 1.0 4.0 11.5
704 529 Ante Žižić C 22 CLE 59 25 18.3 3.1 5.6 ... 0.705 1.8 3.6 5.4 0.9 0.2 0.4 1.0 1.9 7.8
705 530 Ivica Zubac C 21 TOT 59 37 17.6 3.6 6.4 ... 0.802 1.9 4.2 6.1 1.1 0.2 0.9 1.2 2.3 8.9
706 530 Ivica Zubac C 21 LAL 33 12 15.6 3.4 5.8 ... 0.864 1.6 3.3 4.9 0.8 0.1 0.8 1.0 2.2 8.5
707 530 Ivica Zubac C 21 LAC 26 25 20.2 3.8 7.2 ... 0.733 2.3 5.3 7.7 1.5 0.4 0.9 1.4 2.5 9.4

708 rows × 30 columns

In [104]:
#Reverting back to the default
pd.set_option('display.max_rows' , 10)
In [105]:
df
Out[105]:
Rk Player Pos Age Tm G GS MP FG FGA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS
0 1 Álex Abrines SG 25 OKC 31 2 19.0 1.8 5.1 ... 0.923 0.2 1.4 1.5 0.6 0.5 0.2 0.5 1.7 5.3
1 2 Quincy Acy PF 28 PHO 10 0 12.3 0.4 1.8 ... 0.700 0.3 2.2 2.5 0.8 0.1 0.4 0.4 2.4 1.7
2 3 Jaylen Adams PG 22 ATL 34 1 12.6 1.1 3.2 ... 0.778 0.3 1.4 1.8 1.9 0.4 0.1 0.8 1.3 3.2
3 4 Steven Adams C 25 OKC 80 80 33.4 6.0 10.1 ... 0.500 4.9 4.6 9.5 1.6 1.5 1.0 1.7 2.6 13.9
4 5 Bam Adebayo C 21 MIA 82 28 23.3 3.4 5.9 ... 0.735 2.0 5.3 7.3 2.2 0.9 0.8 1.5 2.5 8.9
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
703 528 Tyler Zeller C 29 MEM 4 1 20.5 4.0 7.0 ... 0.778 2.3 2.3 4.5 0.8 0.3 0.8 1.0 4.0 11.5
704 529 Ante Žižić C 22 CLE 59 25 18.3 3.1 5.6 ... 0.705 1.8 3.6 5.4 0.9 0.2 0.4 1.0 1.9 7.8
705 530 Ivica Zubac C 21 TOT 59 37 17.6 3.6 6.4 ... 0.802 1.9 4.2 6.1 1.1 0.2 0.9 1.2 2.3 8.9
706 530 Ivica Zubac C 21 LAL 33 12 15.6 3.4 5.8 ... 0.864 1.6 3.3 4.9 0.8 0.1 0.8 1.0 2.2 8.5
707 530 Ivica Zubac C 21 LAC 26 25 20.2 3.8 7.2 ... 0.733 2.3 5.3 7.7 1.5 0.4 0.9 1.4 2.5 9.4

708 rows × 30 columns

In [107]:
#Overview of Datatypes of each column in the Dataframe
df.dtypes.head(5)
Out[107]:
Rk         int64
Player    object
Pos       object
Age        int64
Tm        object
dtype: object
In [108]:
#Show specific Data types in our DataFrame
df.select_dtypes(include = ['number'])
Out[108]:
Rk Age G GS MP FG FGA FG% 3P 3PA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS
0 1 25 31 2 19.0 1.8 5.1 0.357 1.3 4.1 ... 0.923 0.2 1.4 1.5 0.6 0.5 0.2 0.5 1.7 5.3
1 2 28 10 0 12.3 0.4 1.8 0.222 0.2 1.5 ... 0.700 0.3 2.2 2.5 0.8 0.1 0.4 0.4 2.4 1.7
2 3 22 34 1 12.6 1.1 3.2 0.345 0.7 2.2 ... 0.778 0.3 1.4 1.8 1.9 0.4 0.1 0.8 1.3 3.2
3 4 25 80 80 33.4 6.0 10.1 0.595 0.0 0.0 ... 0.500 4.9 4.6 9.5 1.6 1.5 1.0 1.7 2.6 13.9
4 5 21 82 28 23.3 3.4 5.9 0.576 0.0 0.2 ... 0.735 2.0 5.3 7.3 2.2 0.9 0.8 1.5 2.5 8.9
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
703 528 29 4 1 20.5 4.0 7.0 0.571 0.0 0.0 ... 0.778 2.3 2.3 4.5 0.8 0.3 0.8 1.0 4.0 11.5
704 529 22 59 25 18.3 3.1 5.6 0.553 0.0 0.0 ... 0.705 1.8 3.6 5.4 0.9 0.2 0.4 1.0 1.9 7.8
705 530 21 59 37 17.6 3.6 6.4 0.559 0.0 0.0 ... 0.802 1.9 4.2 6.1 1.1 0.2 0.9 1.2 2.3 8.9
706 530 21 33 12 15.6 3.4 5.8 0.580 0.0 0.0 ... 0.864 1.6 3.3 4.9 0.8 0.1 0.8 1.0 2.2 8.5
707 530 21 26 25 20.2 3.8 7.2 0.538 0.0 0.0 ... 0.733 2.3 5.3 7.7 1.5 0.4 0.9 1.4 2.5 9.4

708 rows × 27 columns

In [110]:
#Show specific Data types in our DataFrame
df.select_dtypes(include = ['object'])
Out[110]:
Player Pos Tm
0 Álex Abrines SG OKC
1 Quincy Acy PF PHO
2 Jaylen Adams PG ATL
3 Steven Adams C OKC
4 Bam Adebayo C MIA
... ... ... ...
703 Tyler Zeller C MEM
704 Ante Žižić C CLE
705 Ivica Zubac C TOT
706 Ivica Zubac C LAL
707 Ivica Zubac C LAC

708 rows × 3 columns

In [112]:
#df.select_dtypes(include=['datetime64'])

Which player scored the most points per game ?

In [114]:
df.PTS.max()
Out[114]:
36.1
In [118]:
#Filter : df ---> PTS == max()
#This is Conditional Selection
df[df.PTS == df.PTS.max()]
Out[118]:
Rk Player Pos Age Tm G GS MP FG FGA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS
270 207 James Harden PG 29 HOU 78 78 36.8 10.8 24.5 ... 0.879 0.8 5.8 6.6 7.5 2.0 0.7 5.0 3.1 36.1

1 rows × 30 columns

What Team is the Player from ?

In [119]:
PlayerMaxPoints = df[df.PTS == df.PTS.max()]
In [120]:
PlayerMaxPoints.Tm
Out[120]:
270    HOU
Name: Tm, dtype: object

which Position is the Player Playing as?

In [121]:
PlayerMaxPoints
Out[121]:
Rk Player Pos Age Tm G GS MP FG FGA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS
270 207 James Harden PG 29 HOU 78 78 36.8 10.8 24.5 ... 0.879 0.8 5.8 6.6 7.5 2.0 0.7 5.0 3.1 36.1

1 rows × 30 columns

In [122]:
PlayerMaxPoints.Pos
Out[122]:
270    PG
Name: Pos, dtype: object

How many games did the Player played in the Season?

In [123]:
PlayerMaxPoints.G
Out[123]:
270    78
Name: G, dtype: int64

Which Player Scored more than 20 points per game?

In [125]:
df[df['PTS']>20]
Out[125]:
Rk Player Pos Age Tm G GS MP FG FGA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS
7 8 LaMarcus Aldridge C 33 SAS 81 81 33.2 8.4 16.3 ... 0.847 3.1 6.1 9.2 2.4 0.5 1.3 1.8 2.2 21.3
19 18 Giannis Antetokounmpo PF 24 MIL 72 72 32.8 10.0 17.3 ... 0.729 2.2 10.3 12.5 5.9 1.3 1.5 3.7 3.2 27.7
47 40 Bradley Beal SG 25 WAS 82 82 36.9 9.3 19.6 ... 0.808 1.1 3.9 5.0 5.5 1.5 0.7 2.7 2.8 25.6
68 61 Devin Booker SG 22 PHO 64 64 35.0 9.2 19.6 ... 0.866 0.6 3.5 4.1 6.8 0.9 0.2 4.1 3.1 26.6
103 84 Jimmy Butler SG 29 MIN 10 10 36.1 7.4 15.7 ... 0.787 1.6 3.6 5.2 4.3 2.4 1.0 1.4 1.8 21.3
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
648 481 Karl-Anthony Towns C 23 MIN 77 77 33.1 8.8 17.1 ... 0.836 3.4 9.0 12.4 3.4 0.9 1.6 3.1 3.8 24.4
662 493 Nikola Vučević C 28 ORL 80 80 31.4 8.8 16.9 ... 0.789 2.8 9.2 12.0 3.8 1.0 1.1 2.0 2.0 20.8
666 497 Kemba Walker PG 28 CHO 82 82 34.9 8.9 20.5 ... 0.844 0.6 3.8 4.4 5.9 1.2 0.4 2.6 1.6 25.6
668 499 John Wall PG 28 WAS 32 32 34.5 7.7 17.3 ... 0.697 0.5 3.2 3.6 8.7 1.5 0.9 3.8 2.2 20.7
675 506 Russell Westbrook PG 30 OKC 73 73 36.0 8.6 20.2 ... 0.656 1.5 9.6 11.1 10.7 1.9 0.5 4.5 3.4 22.9

34 rows × 30 columns

Which player had the highest 3Point Field Goals per game?

In [126]:
df[df['3P'] == df['3P'].max()]
Out[126]:
Rk Player Pos Age Tm G GS MP FG FGA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS
159 124 Stephen Curry PG 30 GSW 69 69 33.8 9.2 19.4 ... 0.916 0.7 4.7 5.3 5.2 1.3 0.4 2.8 2.4 27.3

1 rows × 30 columns

Which player had the highest Assists per game?

In [127]:
df[df['AST'] == df['AST'].max()]
Out[127]:
Rk Player Pos Age Tm G GS MP FG FGA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS
675 506 Russell Westbrook PG 30 OKC 73 73 36.0 8.6 20.2 ... 0.656 1.5 9.6 11.1 10.7 1.9 0.5 4.5 3.4 22.9

1 rows × 30 columns

Group By() function

Which player scored the higest (PTS) points from the Los Angeles Lakers?

In [138]:
#The below code groups the data by the TEAM >>> df.groupby('Tm')
#Then it will select the specific team that we want , that is LAL
In [146]:
LAL1 = df[df['Tm'] == 'LAL']
In [147]:
LAL1.shape
Out[147]:
(22, 30)
In [148]:
LAL.shape
Out[148]:
(22, 30)
In [149]:
LAL = df.groupby('Tm').get_group('LAL')
In [150]:
LAL
Out[150]:
Rk Player Pos Age Tm G GS MP FG FGA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS
35 30 Lonzo Ball PG 21 LAL 47 45 30.3 3.9 9.7 ... 0.417 1.1 4.2 5.3 5.4 1.5 0.4 2.2 2.4 9.9
49 42 Michael Beasley PF 30 LAL 26 2 10.7 2.9 5.9 ... 0.718 0.5 1.8 2.3 1.0 0.3 0.4 1.0 1.6 7.0
67 60 Isaac Bonga PG 19 LAL 22 0 5.5 0.2 1.5 ... 0.600 0.4 0.7 1.1 0.7 0.4 0.2 0.3 0.4 0.9
93 80 Reggie Bullock SG 27 LAL 19 16 27.6 3.3 8.1 ... 0.810 0.1 2.5 2.6 1.1 0.8 0.4 0.6 1.6 9.3
107 87 Kentavious Caldwell-Pope SG 25 LAL 82 23 24.8 4.0 9.2 ... 0.867 0.6 2.3 2.9 1.3 0.9 0.2 0.8 1.7 11.4
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
569 429 Rajon Rondo PG 32 LAL 46 29 29.8 3.8 9.4 ... 0.639 0.7 4.5 5.3 8.0 1.2 0.2 2.8 2.2 9.2
625 464 Lance Stephenson SG 28 LAL 68 3 16.5 2.7 6.4 ... 0.685 0.5 2.7 3.2 2.1 0.6 0.1 1.3 1.6 7.2
664 495 Moritz Wagner C 21 LAL 43 5 10.4 1.7 4.0 ... 0.811 0.4 1.6 2.0 0.6 0.3 0.3 0.9 1.3 4.8
682 513 Johnathan Williams C 23 LAL 24 0 15.5 2.7 4.6 ... 0.563 2.0 2.1 4.1 0.5 0.3 0.3 0.7 2.6 6.5
706 530 Ivica Zubac C 21 LAL 33 12 15.6 3.4 5.8 ... 0.864 1.6 3.3 4.9 0.8 0.1 0.8 1.0 2.2 8.5

22 rows × 30 columns

In [151]:
df.head()
Out[151]:
Rk Player Pos Age Tm G GS MP FG FGA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS
0 1 Álex Abrines SG 25 OKC 31 2 19.0 1.8 5.1 ... 0.923 0.2 1.4 1.5 0.6 0.5 0.2 0.5 1.7 5.3
1 2 Quincy Acy PF 28 PHO 10 0 12.3 0.4 1.8 ... 0.700 0.3 2.2 2.5 0.8 0.1 0.4 0.4 2.4 1.7
2 3 Jaylen Adams PG 22 ATL 34 1 12.6 1.1 3.2 ... 0.778 0.3 1.4 1.8 1.9 0.4 0.1 0.8 1.3 3.2
3 4 Steven Adams C 25 OKC 80 80 33.4 6.0 10.1 ... 0.500 4.9 4.6 9.5 1.6 1.5 1.0 1.7 2.6 13.9
4 5 Bam Adebayo C 21 MIA 82 28 23.3 3.4 5.9 ... 0.735 2.0 5.3 7.3 2.2 0.9 0.8 1.5 2.5 8.9

5 rows × 30 columns

In [152]:
OKC = df.groupby('Tm').get_group('OKC')
In [153]:
OKC.head()
Out[153]:
Rk Player Pos Age Tm G GS MP FG FGA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS
0 1 Álex Abrines SG 25 OKC 31 2 19.0 1.8 5.1 ... 0.923 0.2 1.4 1.5 0.6 0.5 0.2 0.5 1.7 5.3
3 4 Steven Adams C 25 OKC 80 80 33.4 6.0 10.1 ... 0.500 4.9 4.6 9.5 1.6 1.5 1.0 1.7 2.6 13.9
101 83 Deonte Burton SG 25 OKC 32 0 7.5 1.0 2.6 ... 0.667 0.1 0.8 0.9 0.3 0.2 0.3 0.3 1.0 2.6
164 129 Tyler Davis C 21 OKC 1 0 1.0 0.0 1.0 ... 0.000 1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0
177 138 Hamidou Diallo SG 20 OKC 51 3 10.3 1.5 3.2 ... 0.610 0.7 1.2 1.9 0.3 0.4 0.2 0.5 1.5 3.7

5 rows × 30 columns

Of the 5 Positions , which position scores the most points ?

In [154]:
#We first group by the Position

df.groupby('Pos').PTS.describe()
Out[154]:
count mean std min 25% 50% 75% max
Pos
C 120.0 8.785000 5.616582 0.0 4.175 7.75 12.350 27.5
C-PF 2.0 4.150000 1.202082 3.3 3.725 4.15 4.575 5.0
PF 147.0 7.703401 5.622380 0.0 3.350 6.30 11.100 27.7
PF-SF 2.0 11.200000 7.353911 6.0 8.600 11.20 13.800 16.4
PG 139.0 8.668345 6.284234 0.0 4.300 7.00 11.050 36.1
SF 120.0 8.259167 5.935203 0.0 4.200 6.70 11.600 28.0
SF-SG 2.0 15.450000 4.596194 12.2 13.825 15.45 17.075 18.7
SG 174.0 8.487356 5.724974 0.0 4.000 7.65 11.275 26.6
SG-PF 1.0 8.600000 NaN 8.6 8.600 8.60 8.600 8.6
SG-SF 1.0 6.500000 NaN 6.5 6.500 6.50 6.500 6.5

Observation

  • Some positiopns are hybrid , eg: C-PF (Both as a Centre and a Power Forward)
  • Meaning , some players played two positions
  • So, the Hybrid positions count is low, so we will remove the Hybrid positions
  • (C-PF , PF-SF , SF-SG , SG-PF , SG-SF )
In [155]:
#First we will define a Variable called "Position"
#We will make a List of positions that we want to be shown

position = ['C' , 'PF' , 'SF' , 'PG' , 'SG']
POS = df[df['Pos'].isin(position)]
In [157]:
POS.head(5)
Out[157]:
Rk Player Pos Age Tm G GS MP FG FGA ... FT% ORB DRB TRB AST STL BLK TOV PF PTS
0 1 Álex Abrines SG 25 OKC 31 2 19.0 1.8 5.1 ... 0.923 0.2 1.4 1.5 0.6 0.5 0.2 0.5 1.7 5.3
1 2 Quincy Acy PF 28 PHO 10 0 12.3 0.4 1.8 ... 0.700 0.3 2.2 2.5 0.8 0.1 0.4 0.4 2.4 1.7
2 3 Jaylen Adams PG 22 ATL 34 1 12.6 1.1 3.2 ... 0.778 0.3 1.4 1.8 1.9 0.4 0.1 0.8 1.3 3.2
3 4 Steven Adams C 25 OKC 80 80 33.4 6.0 10.1 ... 0.500 4.9 4.6 9.5 1.6 1.5 1.0 1.7 2.6 13.9
4 5 Bam Adebayo C 21 MIA 82 28 23.3 3.4 5.9 ... 0.735 2.0 5.3 7.3 2.2 0.9 0.8 1.5 2.5 8.9

5 rows × 30 columns

In [158]:
POS.Pos.unique()
Out[158]:
array(['SG', 'PF', 'PG', 'C', 'SF'], dtype=object)
In [161]:
#Now lets look at the Descriptive Statistics
#We are viewing Descritive statistics of only one column
POS.groupby('Pos').PTS.describe()
Out[161]:
count mean std min 25% 50% 75% max
Pos
C 120.0 8.785000 5.616582 0.0 4.175 7.75 12.350 27.5
PF 147.0 7.703401 5.622380 0.0 3.350 6.30 11.100 27.7
PG 139.0 8.668345 6.284234 0.0 4.300 7.00 11.050 36.1
SF 120.0 8.259167 5.935203 0.0 4.200 6.70 11.600 28.0
SG 174.0 8.487356 5.724974 0.0 4.000 7.65 11.275 26.6

Histograms

We will also try to answer this Question by showing some Hisogram Plots. So, to make it a bit easier lets create a Subset DataFrame.

In [162]:
#Here we are going to select the columns 'Pos' and 'PTS' ---> PTS= df[['Pos', 'PTS']]
#Then we have a list of only the Five positions we are interested in
#position = ['C' , 'PF' , 'SF' , 'PG' , 'SG']

PTS = df[['Pos' , 'PTS']]
position = ['C' , 'PF' , 'SF' , 'PG' , 'SG']
PTS = PTS[PTS['Pos'].isin(position)]
In [163]:
PTS
Out[163]:
Pos PTS
0 SG 5.3
1 PF 1.7
2 PG 3.2
3 C 13.9
4 C 8.9
... ... ...
703 C 11.5
704 C 7.8
705 C 8.9
706 C 8.5
707 C 9.4

700 rows × 2 columns

Pandas Built-in Visualization

In [164]:
PTS.head(2)
Out[164]:
Pos PTS
0 SG 5.3
1 PF 1.7
In [165]:
PTS['PTS'].hist(by = PTS['Pos'])
Out[165]:
array([[<matplotlib.axes._subplots.AxesSubplot object at 0x000001EC4DB43AF0>,
        <matplotlib.axes._subplots.AxesSubplot object at 0x000001EC4DB8FF70>],
       [<matplotlib.axes._subplots.AxesSubplot object at 0x000001EC4DBB5400>,
        <matplotlib.axes._subplots.AxesSubplot object at 0x000001EC4DBD4850>],
       [<matplotlib.axes._subplots.AxesSubplot object at 0x000001EC4DBF2CA0>,
        <matplotlib.axes._subplots.AxesSubplot object at 0x000001EC4DC18190>]],
      dtype=object)

Observation

  • We have made Several Histogram Sub-Plots according to the PTS['Pos'] column
In [166]:
#Letsa change the Layout
#This will show you one Row and Five columns
#We customize the fig size as well

PTS['PTS'].hist(by = PTS['Pos'] , layout =(1,5), figsize=(16,2))
Out[166]:
array([<matplotlib.axes._subplots.AxesSubplot object at 0x000001EC4DCBFA90>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x000001EC4DD2D550>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x000001EC4DD4B9A0>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x000001EC4DD6AD00>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x000001EC4DD90130>],
      dtype=object)
In [167]:
#You can further go ahead and Customize the Bins
In [168]:
#We can do this using Seaborn
import seaborn as sns
import matplotlib.pyplot as plt

g = sns.FacetGrid(PTS , col = 'Pos')
g.map(plt.hist, "PTS");
In [169]:
PTS['PTS'].describe()
Out[169]:
count    700.000000
mean       8.370571
std        5.833083
min        0.000000
25%        4.000000
50%        7.000000
75%       11.425000
max       36.100000
Name: PTS, dtype: float64

Histograms

image.png

Histogram

Example:

Here are the Scores of 15 Students

In [170]:
scores = [88 , 48, 60, 51, 57 , 85 , 69, 75, 97 , 72, 71 , 79, 65, 63 , 73]
In [171]:
len(scores)
Out[171]:
15
In [172]:
scores = pd.Series(scores)
In [173]:
scores
Out[173]:
0     88
1     48
2     60
3     51
4     57
      ..
10    71
11    79
12    65
13    63
14    73
Length: 15, dtype: int64
In [175]:
sorted(scores)
Out[175]:
[48, 51, 57, 60, 63, 65, 69, 71, 72, 73, 75, 79, 85, 88, 97]
In [174]:
scores.describe()
Out[174]:
count    15.000000
mean     70.200000
std      13.592014
min      48.000000
25%      61.500000
50%      71.000000
75%      77.000000
max      97.000000
dtype: float64
In [177]:
scores.median()
Out[177]:
71.0
In [179]:
sorted(scores)
Out[179]:
[48, 51, 57, 60, 63, 65, 69, 71, 72, 73, 75, 79, 85, 88, 97]
In [178]:
scores.hist()
Out[178]:
<matplotlib.axes._subplots.AxesSubplot at 0x1ec4f1a9160>
In [223]:
scores = [88 , 48, 60, 51, 57 , 85 , 69, 75, 97 , 72, 71 , 79, 65, 63 , 73]
In [225]:
scores = scores * 2
In [226]:
scores = pd.Series(scores)
In [227]:
scores.hist()
Out[227]:
<matplotlib.axes._subplots.AxesSubplot at 0x1ec4f6bb580>

BACK TO UDEMY BOOTCAMP

In [229]:
drinks = pd.read_csv('drinks.csv')
In [230]:
drinks.head(2)
Out[230]:
country beer_servings spirit_servings wine_servings total_litres_of_pure_alcohol
0 Afghanistan NaN NaN NaN NaN
1 Albania 89.0 132.0 54.0 4.9
In [725]:
import pandas as pd
import numpy as np
In [726]:
alcohol = pd.read_csv('drinks.csv' , usecols = ['country' , 'wine_servings'], index_col = 'country')
In [232]:
alcohol.mean()
Out[232]:
wine_servings    50.746914
dtype: float64
In [233]:
alcohol.median()
Out[233]:
wine_servings    11.5
dtype: float64
In [234]:
alcohol.hist()
Out[234]:
array([[<matplotlib.axes._subplots.AxesSubplot object at 0x000001EC4F72B550>]],
      dtype=object)
In [236]:
len(alcohol)
Out[236]:
193
In [237]:
alcohol.describe()
Out[237]:
wine_servings
count 162.000000
mean 50.746914
std 76.134917
min 1.000000
25% 3.000000
50% 11.500000
75% 61.250000
max 339.000000

The mean in math and statistics summarizes an entire dataset with a single number representing the data’s center point or typical value. It is also known as the arithmetic mean, and it is the most common measure of central tendency. It is frequently called the “average.”

image.png

image.png

image.png

In [238]:
alcohol.mean()
Out[238]:
wine_servings    50.746914
dtype: float64
In [239]:
alcohol.median()
Out[239]:
wine_servings    11.5
dtype: float64
In [240]:
alcohol.hist()
Out[240]:
array([[<matplotlib.axes._subplots.AxesSubplot object at 0x000001EC4F7EDD30>]],
      dtype=object)

Observation

  • The MEAN in the Alcohol series is so much higher than the MEDIAN
  • Mean is 50.7 and Median is 11.5
  • This indicates that the Distribution of wine_servings is Right Skewed or Positively Skewed
  • In other words , there are countries with large Servings that Distort our MEAN

image.png

X-Axis : Will have values increasing from left to right

Y-Axis : will have frequencies or how many times those values show up in the distribution image.png

Positive Skew :

  • Whenever we say say that it is postively skewed , we mean that the Distribution of values extends into the Right hand tail. We have more Data on the Right hand side of the Distribution and more extreme Observations. There are more number of high value obsevations than there are low value observations
In [297]:
scores = [1,1,1,2,2,2,2,4,4,4,4,4,5,5,5,5,5,5,6,7,9,10,11,12,12,12,13,14,15,
          17,19,20,21,23,25,33,35,40,44,45,46,47,48]
In [298]:
scores = pd.Series(scores)
In [299]:
scores.mean()
Out[299]:
15.0
In [300]:
scores.median()
Out[300]:
10.0
In [301]:
scores.hist()
Out[301]:
<matplotlib.axes._subplots.AxesSubplot at 0x1ec50c87fd0>

Negative Skew:

  • Negative Skew is exactly the opposite of Positive Skew
  • The Distribution of values extends to the Left hand side of the tail
  • We have more data on the Left hand side of the Distribution and more extreme observations
  • There are more number of LOW value observations than there are high value observations
In [720]:
scores = [0,0.8,1,1.2,1.5,2,2.2,2.5,3,3.2,3.5,3.6,3.7,4,4.1,4.2,4.4,4.5,5,6]
In [721]:
scores = pd.Series(scores)
In [722]:
scores.mean()
Out[722]:
3.0200000000000005
In [723]:
scores.median()
Out[723]:
3.35
In [724]:
scores.hist()
Out[724]:
<matplotlib.axes._subplots.AxesSubplot at 0x1ec50f30b80>
In [727]:
alcohol = pd.read_csv('drinks.csv' , usecols = ['country' , 'wine_servings'], index_col = 'country')
In [730]:
alcohol.quantile(0.5)
Out[730]:
wine_servings    11.5
Name: 0.5, dtype: float64
In [731]:
alcohol.hist()
Out[731]:
array([[<matplotlib.axes._subplots.AxesSubplot object at 0x000001EC52914FA0>]],
      dtype=object)

Observation

  • This is a very positively skewed distribution
  • Most of our observations are concentrated on the lower end
  • And then we have values that extend into the far right
  • Whenever this is the case, the MEAN will exceed the MEDIAN
  • Because it will be pulled by the extreme Observations

Remember : As we said MEDIAN is the 50th Quantile

IQR : Inter Quartile Range

IQR is the difference between the First and Third Quartiles

In [734]:
alcohol.median()
Out[734]:
wine_servings    11.5
dtype: float64
In [732]:
#IQR is calculated as:

iqr = alcohol.quantile(0.75) - alcohol.quantile(0.25)
In [733]:
iqr
Out[733]:
wine_servings    58.25
dtype: float64

Observation

  • So, our alcohol series has an InterQuartile Range of 58.25
  • Which is quite a significant Difference
  • This number as well confirms that our Data is not distributed Symmetrically
  • The MEDIAN was 11.5
  • The IQR : 58.25 is five times the Median

The InterQuartile Range measures the spread of the middle half of your data. It is the range for the middle 50% of your Sample. Use the IQR to assess the variability where most of your values lie.

Larger values indicate that the central portion of your data spread out further. conversely smaller values show that , the middle values cluster more tightly. It is also helpful to test whether your data is normally distributed.

InterQuartile Range is one of the serveral measures of variability:

To visualize the interquartile range, imagine dividing your data into quarters. Statisticians refer to these quarters as quartiles and label them from low to high as Q1, Q2, Q3, and Q4. The lowest quartile (Q1) covers the smallest quarter of values in your dataset. The upper quartile (Q4) comprises the highest quarter of values. The interquartile range is the middle half of the data that lies between the upper and lower quartiles. In other words, the interquartile range includes the 50% of data points that are above Q1 and below Q4.

image.png

IQR is less affected by Outliers. typically , use the IQR with a measure of Central Tendency , such as the MEDIAN to understand your Data's Center and Spread. This combination creates a fuller picture of your data's distribution.

Unlike the more familiar MEAN and Standard deviation, the IQR and Median are Robust measures. They are not influenced by the Outliers because they dont depend on every value. Additionally , like the MEDIAN , IQR is superb for skewed Distributions. For Normal Distributions , you can use the standard Deviation to determine the percentage of obsrervations that fall specific distances from the MEAN. For Skewed distributions , IQR is an excellent alternative.

IQR = Q3 - Q1

IQR takes the Third Quartile Value and subtracts the First Quartile value. Equivalently , the InterQuartile Range is the region between the 75th and 25th Percentile (75 - 25 = 50% of the Data)

Using the IQR formula we need to find the values for Q3 and Q1. To do this, order your data from Low to high and split it into four Equal Proportions.

In [735]:
Q3 = alcohol.quantile(0.75)
Q1 = alcohol.quantile(0.25)
In [739]:
print(Q3)
print(Q1)
wine_servings    61.25
Name: 0.75, dtype: float64
wine_servings    3.0
Name: 0.25, dtype: float64
In [736]:
iqr = alcohol.quantile(0.75) - alcohol.quantile(0.25)
In [737]:
iqr
Out[737]:
wine_servings    58.25
dtype: float64

image.png

The Box in the Box plot is your InterQuartile Range. It contains 50% of your Data. By comparing the size of these boxes , you can understand your data's variability. More dispersed distributions have wider boxes.

Additionally , Find where the MEDIAN line falls within each InterQuartile box.If the MEDIAN is close to one side or the other of the Box , its a skewed distribution. When the MEDIAN is near the centre of the Interquartile range , your distribution is symmetric.

image.png

You can also find Outliers using IQR . Since IQR is robust and not influenced by Outliers:

image.png

image.png

Back to Bootcamp lecture

min and max

In [740]:
alcohol.min()
Out[740]:
wine_servings    1.0
dtype: float64
In [741]:
alcohol.max()
Out[741]:
wine_servings    339.0
dtype: float64

Observation

  • alcohol dot min gives us the minimum Wine servings in our alcohol series
  • And alcohol dot max gives us the maximum

Standard Deviation

In [742]:
alcohol.std()
Out[742]:
wine_servings    76.134917
dtype: float64

Standard Deviation is just the Square Root of the Variance

VARIANCE

In [743]:
alcohol.var()
Out[743]:
wine_servings    5796.525612
dtype: float64

Square Root of Standard Deviation is equal to Variance

In [744]:
alcohol.std()**2 == alcohol.var()
Out[744]:
wine_servings    True
dtype: bool
In [745]:
76.134917 ** 2
Out[745]:
5796.525586596889

The describe() method

Almost everything that we previously calculated manually , could be obtained using this single method.

In [746]:
alcohol.describe()
Out[746]:
wine_servings
count 162.000000
mean 50.746914
std 76.134917
min 1.000000
25% 3.000000
50% 11.500000
75% 61.250000
max 339.000000

This method returns a Pandas Series containing Descriptive Statistics and it is very convenient and Quick.

  • It gives us a really good numerical sense of what we are working with.
  • We can customise this a bit
In [747]:
#We can specify we also need the 79th and the 19th Percentiles as well

alcohol.describe(percentiles = [0.79 , 0.19])
Out[747]:
wine_servings
count 162.000000
mean 50.746914
std 76.134917
min 1.000000
19% 2.000000
50% 11.500000
79% 81.570000
max 339.000000

Observation

  • The Non-Null count of wine_servings is 162
  • The Average value is 50.7 with a Standard Deviation of 76.1%
  • The minimum wine_serving for a country is 1
  • The maximum wine_servings are 339
  • Median value is 11.5 (By comparing the median to the mean, you can get an idea of the distribution of a dataset. When the mean and the median are the same, the dataset is more or less evenly distributed from the lowest to highest values. When the mean and the median are different then it is likely the data is not symmetrical but is either skewed to the left or the right.)

image.png

median is the data value in the data, above and below which there is an equal number of data points.there is an equal probability of falling above or below it.

Mean, median, and mode are three kinds of "averages". There are many "averages" in statistics, but these are, I think, the three most common, and are certainly the three you are most likely to encounter in your pre-statistics courses, if the topic comes up at all.

The "mean" is the "average" you're used to, where you add up all the numbers and then divide by the number of numbers. The "median" is the "middle" value in the list of numbers. To find the median, your numbers have to be listed in numerical order from smallest to largest, so you may have to rewrite your list before you can find the median. The "mode" is the value that occurs most often. If no number in the list is repeated, then there is no mode for the list.

Mode- It is the value which has highest frequency in population.

The median, just like the mean, is a single-number indicator of how a particular distribution is centered. When the distribution is symmetrical, the two numbers coincide. But when the distribution is skew (e.g. in income statistics) the median is a better indicator (gives a more realistic picture at a glance).

Median is the most robust estimator to outliers. Outlier is one huge problem in statistics since it happen all the time. When people record the data wrongly, when there are strange cases in the world (income). So median is good idea to look when that happens.

image.png

They are simple descriptive statistics - so 3 simple numbers tell you a fair amount about your data and you can use them in your reporting.

But don’t underestimate the value of plotting/graphing your data. This will give you pretty much the same information as those 3 statistics, and even more detail, e.g. it will tell you the range, give a visual indication of the quartiles and the presence/absence of outliers.

Back to the Bootcamp

In [748]:
alcohol.describe()
Out[748]:
wine_servings
count 162.000000
mean 50.746914
std 76.134917
min 1.000000
25% 3.000000
50% 11.500000
75% 61.250000
max 339.000000
In [749]:
#We can use the include and exclude parameter
#Filter data by type , include float data type and exclude object data type
alcohol.describe(include =float , exclude = object)
Out[749]:
wine_servings
count 162.000000
mean 50.746914
std 76.134917
min 1.000000
25% 3.000000
50% 11.500000
75% 61.250000
max 339.000000

since "alcohol" dtype is just "float" , the above output did not change when we specified the include and exclude explicitly

In [753]:
type(alcohol)
Out[753]:
pandas.core.frame.DataFrame

mode() and value_counts()

mode() gives us the most common item or the value that occurs most frequently in a collection of values

image.png

So, the value that appears most number of times or the one that has the highest frequency in the series becomes the mode. Mode is the PEAK of the distribution.

Median is the middle most observation. In other words, its the point in our dataset that separates the dataset into two equal sized parts. And the MEAN is simply the Average value , which we calculate as the sum of all observations divided by the count of all observations.

In [754]:
#Calculate the mode
alcohol.mode()
Out[754]:
wine_servings
0 1.0

Observation

  • The most frequent occuring wine serving across all countries in our alcohol dataset is 1.
In [755]:
#Lets say we are interested in figuring out how many times this value of 1 occurs.
#To answer this we use a basic Boolean Mask
#we use "==" to compare the integer value "1" to each value in the series

alcohol == 1
Out[755]:
wine_servings
country
Afghanistan False
Albania False
Algeria False
Andorra False
Angola False
... ...
Venezuela False
Vietnam True
Yemen False
Zambia False
Zimbabwe False

193 rows × 1 columns

In [761]:
#Now we can use this boolean mask to index the alcohol series
alcohol[alcohol['wine_servings'] == 1]
Out[761]:
wine_servings
country
Brunei 1.0
Cambodia 1.0
Canada 1.0
Central African Republic 1.0
Chad 1.0
... ...
Philippines 1.0
Solomon Islands 1.0
Thailand 1.0
Tanzania 1.0
Vietnam 1.0

28 rows × 1 columns

In [762]:
alcohol[alcohol['wine_servings'] == 1].size
Out[762]:
28

Observation

  • We know that there are 28 Countries with a wine Serving of 1

value_counts()

Calculates the number of occurances for each unique value all in one go

In [766]:
alcohol['wine_servings'].value_counts()
Out[766]:
1.0      28
2.0      10
7.0       9
8.0       7
5.0       6
         ..
185.0     1
218.0     1
84.0      1
149.0     1
54.0      1
Name: wine_servings, Length: 71, dtype: int64

Oservation

  • We get back a sorted Series which contains values in the Index and the associated frequencies
In [779]:
#The first value is oocuring how many times
alcohol['wine_servings'].value_counts().iloc[0]
Out[779]:
28
In [781]:
alcohol['wine_servings'].value_counts().values
Out[781]:
array([28, 10,  9,  7,  6,  6,  5,  5,  4,  4,  4,  3,  2,  2,  2,  2,  2,
        2,  2,  2,  2,  2,  2,  2,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1], dtype=int64)
In [773]:
len(alcohol['wine_servings'].value_counts())
Out[773]:
71
In [778]:
alcohol['wine_servings'].value_counts().tail()
Out[778]:
185.0    1
218.0    1
84.0     1
149.0    1
54.0     1
Name: wine_servings, dtype: int64

Access the Index values from value counts

In [803]:
alcohol['wine_servings'].value_counts()
Out[803]:
1.0      28
2.0      10
7.0       9
8.0       7
5.0       6
         ..
185.0     1
218.0     1
84.0      1
149.0     1
54.0      1
Name: wine_servings, Length: 71, dtype: int64
In [786]:
vc = pd.DataFrame(alcohol['wine_servings'].value_counts())
In [793]:
vc.index
Out[793]:
Float64Index([  1.0,   2.0,   7.0,   8.0,   5.0,   9.0,   4.0,  11.0,   3.0,
               16.0,  18.0,  45.0,  12.0,  59.0,  74.0,  21.0,  56.0,  28.0,
              175.0,  19.0,  32.0,  14.0,  51.0, 212.0,  36.0, 172.0,  94.0,
               42.0, 191.0,  35.0, 254.0, 113.0, 221.0, 312.0, 134.0, 278.0,
               26.0,  13.0, 233.0,  22.0,  97.0,  23.0, 195.0,  86.0, 186.0,
              112.0,  81.0, 276.0, 116.0, 127.0,  24.0,  71.0,  73.0, 167.0,
              339.0, 129.0,  37.0, 128.0, 271.0,  31.0,  62.0, 123.0,   6.0,
              237.0, 165.0,  78.0, 185.0, 218.0,  84.0, 149.0,  54.0],
             dtype='float64')
In [796]:
#This is the most frequent value or the MODE 
vc.index[0]
Out[796]:
1.0
In [798]:
len(vc.index)
Out[798]:
71
In [800]:
#This is the least frequent value
vc.index[70]
Out[800]:
54.0

OR

In [802]:
vc.index[len(vc.index)-1]
Out[802]:
54.0

value_counts() by default :

  • sort = True
  • ascending = False
  • dropna = True
  • normalize = False

What is normalize doing?

PANDAS : value_counts()

By default "normalize" is set to "False", but when we set to True , we get the relative frequencies of the unique values in the series .

In [804]:
alcohol['wine_servings'].value_counts(normalize  = True)
Out[804]:
1.0      0.172840
2.0      0.061728
7.0      0.055556
8.0      0.043210
5.0      0.037037
           ...   
185.0    0.006173
218.0    0.006173
84.0     0.006173
149.0    0.006173
54.0     0.006173
Name: wine_servings, Length: 71, dtype: float64

Observation

  • We dont get absolute counts but we get the Relative Frequencies.
  • The first record 1 is associated with 17.28 %
  • This means that the value 1 accounts for 17.3% of all the unique values in the Series.

idxmax() and idxmin()

Which country had the most wine servings in 2010?

In [805]:
alcohol.max()
Out[805]:
wine_servings    339.0
dtype: float64

But which country this is ?

In [807]:
#We can set a Boolean Mask
alcohol[alcohol['wine_servings'] == alcohol['wine_servings'].max()]
Out[807]:
wine_servings
country
Portugal 339.0
In [809]:
alcohol['wine_servings'].hist()
Out[809]:
<matplotlib.axes._subplots.AxesSubplot at 0x1ec542f0b50>
In [810]:
#But what we get here is a Series and not the country name separately
alcohol[alcohol['wine_servings'] == alcohol['wine_servings'].max()]
Out[810]:
wine_servings
country
Portugal 339.0
In [811]:
type(alcohol[alcohol['wine_servings'] == alcohol['wine_servings'].max()])
Out[811]:
pandas.core.frame.DataFrame
In [815]:
#we can get the country name by isolating the "Index" component of this series
alcohol[alcohol['wine_servings'] == alcohol['wine_servings'].max()]
Out[815]:
wine_servings
country
Portugal 339.0
In [816]:
drinks.head(2)
Out[816]:
country beer_servings spirit_servings wine_servings total_litres_of_pure_alcohol
0 Afghanistan NaN NaN NaN NaN
1 Albania 89.0 132.0 54.0 4.9
In [817]:
alcohol = pd.Series(drinks['wine_servings'].values, index=drinks['country'])
In [818]:
alcohol
Out[818]:
country
Afghanistan      NaN
Albania         54.0
Algeria         14.0
Andorra        312.0
Angola          45.0
               ...  
Venezuela        3.0
Vietnam          1.0
Yemen            NaN
Zambia           4.0
Zimbabwe         4.0
Length: 193, dtype: float64
In [822]:
#we can get the country name by isolating the "Index" component of this series
#This returns a Pandas index object
alcohol[alcohol == alcohol.max()].index
Out[822]:
Index(['Portugal'], dtype='object', name='country')
In [823]:
#To get the country name
alcohol[alcohol == alcohol.max()].index[0]
Out[823]:
'Portugal'

The above procedure is very confusing. The same thing can be done using the idx method.

Get the Index value associated with the MAX value in the Series

In [824]:
alcohol.idxmax()
Out[824]:
'Portugal'
In [829]:
#This is the Series
alcohol.max()
Out[829]:
339.0
In [827]:
#This is the Dataframe 
drinks['wine_servings'].max()
Out[827]:
339.0
In [830]:
alcohol[alcohol == alcohol.max()]
Out[830]:
country
Portugal    339.0
dtype: float64
In [833]:
drinks['wine_servings'].idxmax()
Out[833]:
136
In [834]:
drinks['wine_servings'].iloc[136]
Out[834]:
339.0
In [836]:
drinks.iloc[drinks['wine_servings'].idxmax()]
Out[836]:
country                         Portugal
beer_servings                        194
spirit_servings                       67
wine_servings                        339
total_litres_of_pure_alcohol          11
Name: 136, dtype: object
In [838]:
drinks.loc[drinks['wine_servings'] == drinks['wine_servings'].max()]
Out[838]:
country beer_servings spirit_servings wine_servings total_litres_of_pure_alcohol
136 Portugal 194.0 67.0 339.0 11.0
In [839]:
alcohol.idxmin()
Out[839]:
'Brunei'
In [840]:
alcohol.min()
Out[840]:
1.0

Important to note :

we have seen in the value_counts , there are 28 countries with a min value of 1

In [842]:
alcohol.value_counts().head(1)
Out[842]:
1.0    28
dtype: int64

But what we see in "alcohol.idxmin" is only one of those countries

In [844]:
alcohol.idxmin()
Out[844]:
'Brunei'
In [846]:
#This is the actual result
alcohol[alcohol == alcohol.min()]
Out[846]:
country
Brunei                      1.0
Cambodia                    1.0
Canada                      1.0
Central African Republic    1.0
Chad                        1.0
                           ... 
Philippines                 1.0
Solomon Islands             1.0
Thailand                    1.0
Tanzania                    1.0
Vietnam                     1.0
Length: 28, dtype: float64

Conclusion :

idxmin() and idxmax() are very convenient methods that will return only the First label associated with the max and min values repectively

In [848]:
alcohol.idxmax()
Out[848]:
'Portugal'
In [850]:
#we can simply enter this index value to get the row
alcohol['Portugal']
Out[850]:
339.0
In [853]:
drinks.head(2)
Out[853]:
country beer_servings spirit_servings wine_servings total_litres_of_pure_alcohol
0 Afghanistan NaN NaN NaN NaN
1 Albania 89.0 132.0 54.0 4.9
In [854]:
drinks.iloc[0]
Out[854]:
country                         Afghanistan
beer_servings                           NaN
spirit_servings                         NaN
wine_servings                           NaN
total_litres_of_pure_alcohol            NaN
Name: 0, dtype: object

⚫⚫🛑➖⚫🛑⚫⚫➖⚫⚫🛑➖⚫🛑⚫⚫⚫⚫🛑➖⚫🛑⚫⚫⚫⚫🛑➖⚫🛑⚫⚫⚫⚫🛑➖⚫🛑⚫⚫⚫⚫🛑➖⚫🛑⚫⚫

In [ ]: